타입 클래스를 이해하지 못한다고 생각합니다. 나는 어딘가에서 타입 클래스를 "인터페이스"(OO에서 나온)라고 생각하는 타입이 구현하는 것이 잘못되고 오도된다는 것을 읽었습니다. 문제는, 나는 그것들을 다른 것으로보고 그것이 어떻게 잘못되었는지 보는 데 문제가 있다는 것입니다.
예를 들어 유형 클래스가있는 경우 (Haskell 구문)
class Functor f where
fmap :: (a -> b) -> f a -> f b
[1] 인터페이스와 다른 점은 무엇입니까 (Java 구문)
interface Functor<A> {
<B> Functor<B> fmap(Function<B, A> fn)
}
interface Function<Return, Argument> {
Return apply(Argument arg);
}
내가 생각할 수있는 한 가지 차이점은 특정 호출에서 사용되는 유형 클래스 구현이 지정되지 않고 환경에서 결정된다는 것입니다. OO 언어로 해결할 수있는 구현 아티팩트 인 것 같습니다. 컴파일러 (또는 런타임)와 같이 유형에 필요한 인터페이스를 제공하는 래퍼 / 확장기 / 원숭이 패치기를 검색 할 수 있습니다.
내가 무엇을 놓치고 있습니까?
[1] f a
인수가 fmap
OO 언어이기 때문에 인수가 제거되었으므로 객체에서이 메소드를 호출합니다. 이 인터페이스는 f a
인수가 수정되었다고 가정합니다 .