문제
여기에는 코드에서 촬영 http://www.angelfire.com/tx4/cus/shapes/haskell98.html .그것은 컴파일하고 제대로 실행에 WinGHCi 면 댓글을 이름에서 모듈을 헤더가 있습니다.하지만 경우에는 이름은 그 다음 그것을 컴파일되지 않습니다-그것은 보고서에 오류가 이름을 MakeCircle.나의 질문은:하고 싶다면 명시적으로 언급하고 싶어지는 수출 MakeCircle,코드 변경이 필요?
module Circle -- (Circle, MakeCircle, getRadius, setRadius)
where
import Shape
class Shape a => Circle a where
getRadius :: a -> Int
setRadius :: a -> Int -> a
instance Shape CircleInstance where
getX = x
getY = y
setX a newx = a {x = newx}
setY a newy = a {y = newy}
moveTo a newx newy = a {x = newx, y = newy}
rMoveTo a deltax deltay = a {x = ((getX a) + deltax), y = ((getY a) + deltay)}
draw a =
putStrLn ("Drawing a Circle at:(" ++ (show (getX a)) ++ "," ++ (show (getY a)) ++
"), radius " ++ (show (getRadius a)))
instance Circle CircleInstance where
getRadius = radius
setRadius a newradius = a {radius = newradius}
data CircleInstance = MakeCircle {x, y, radius :: Int}
deriving(Eq, Show)
해결책
MakeCircle
가 데이터 생성자 에 대한 유형 CircleInstance
.데이터 생성자를 내보낼 수 있습 조합에서 자신의 정의 유형입니다.당신은 아마도 내보내기 Circle
클래 방법 getRadius
고 setRadius
;현재 수출 목록 그 방법을 사용할 수 없습니다 이 모듈이 있습니다.
변경 내보내기 목록
module Circle (Circle (..), CircleInstance (MakeCircle), getRadius, setRadius)
이 두 가지 형태의 수출.내보내기 Circle (..)
수출 유형 클래스 Circle
의 모든 방법을 동 CircleInstance (MakeCircle)
수출 유형을 생성자 CircleInstance
만 그것의 데이터 생성자 MakeCircle
.는 경우를 추가하는 새로운 데이터 생성자를 위한 MakeCircle 마 UnitCircle
, 는 생성되지 않을 것 수출 모듈에서하지 않는 한 당신 중에 그것을 언급된 목록 내보내기(예: CircleInstance (MakeCircle, UnitCircle)
다)또는 사용 (..)
의 형태로 수출하고 있습니다.
다른 팁
내보내기 목록이 올바르지 않아야합니다.
module Circle(Circle, CircleInstance(MakeCircle), getRadius, setRadius)
.
또는 아마도
module Circle(Circle, CircleInstance(..), getRadius, setRadius)
.