문제

여기에는 코드에서 촬영 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 클래 방법 getRadiussetRadius;현재 수출 목록 그 방법을 사용할 수 없습니다 이 모듈이 있습니다.

변경 내보내기 목록

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)
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top