Go에서 fmap 에뮬레이션: 실용적인 접근 방식
Go에서 Haskell 유형 클래스의 표현력을 에뮬레이션하는 것은 어려운 일입니다. 그러한 예 중 하나는 함수형 프로그래밍의 기본 작업인 fmap의 에뮬레이션입니다.
도전
Go에서 fmap을 구현하려는 다음 시도를 고려해 보세요.
type S[A any] struct { contents A } type Functor[A any, B any] interface{ fmap(f func(A)B) B } func (x S[A]) fmap (f func(A)B) S[B] { x.contents = f(x.contents) return x }
Go 메소드가 새로운 유형 매개변수를 도입할 수 없기 때문에 이 구현은 실패합니다. 결과적으로 fmap 메소드는 B 유형에 접근할 수 없습니다.
실용적인 솔루션
Go에서 유형 클래스를 에뮬레이션하기 위해 제네릭 및 메소드를 사용하는 데에는 한계가 있지만 가능합니다. fmap을 최상위 함수로 구현하려면:
func Fmap[A, B any](sa S[A], f func(A) B) S[B] { return S[B]{contents: f(sa.contents)} }
이 접근 방식은 다음의 제약 없이 원하는 기능을 제공합니다. Go의 유형 시스템. 그러나 그러한 에뮬레이션이 Go의 관용적 접근 방식과 일치하는지 평가하는 것이 중요합니다.
위 내용은 Go에서 Haskell의 'fmap'을 어떻게 효과적으로 에뮬레이트할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!