그것은 일반적으로 다음과 같은 불법 보인다하스켈 클래스 정의의 암시 적 타입 매개 변수?
의미가class Foo a where
foo :: a -> b -> a
; b
는 무엇을 알 수 있습니까? 우리가은 Functor의 정의를 보면
그러나 :
class Functor f where
fmap :: (a -> b) -> f a -> f b
우리는 a
및 b
우리가 단지 형 변수로 f
을 지정하더라도 게재를 참조하십시오. 컴파일러에서 예를 들어 볼 수 있기 때문에 이것이 허용 된 것 같습니다. f a
이고 f
그 자체가 a
이어야한다는 것을 알 수 있으므로 Functor 정의의 다른 곳에서 a
을 사용하는 것이 안전합니다. 나 맞아?