>백엔드 개발 >Golang >Go에서 Haskell의 'fmap'을 어떻게 효과적으로 에뮬레이트할 수 있나요?

Go에서 Haskell의 'fmap'을 어떻게 효과적으로 에뮬레이트할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-18 18:48:14760검색

How Can We Effectively Emulate Haskell's `fmap` in Go?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.