Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Kita Boleh Meniru `fmap` Haskell dengan Berkesan dalam Go?

Bagaimanakah Kita Boleh Meniru `fmap` Haskell dengan Berkesan dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-18 18:48:14823semak imbas

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

Mencontohi fmap dalam Go: Pendekatan Praktikal

Dalam Go, meniru kuasa ekspresif kelas taip Haskell memberikan cabaran. Satu contoh sedemikian ialah emulasi fmap, operasi asas dalam pengaturcaraan berfungsi.

Cabaran

Pertimbangkan percubaan berikut untuk melaksanakan fmap dalam Go:

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
}

Pelaksanaan ini gagal kerana kaedah Go tidak dapat memperkenalkan parameter jenis baharu. Akibatnya, kaedah fmap tidak boleh mengakses jenis B.

Penyelesaian Praktikal

Walaupun menggunakan generik dan kaedah untuk meniru kelas taip dalam Go mempunyai had, adalah mungkin untuk melaksanakan fmap sebagai fungsi peringkat atas:

func Fmap[A, B any](sa S[A], f func(A) B) S[B] {
    return S[B]{contents: f(sa.contents)}
}

Pendekatan ini menyediakan kefungsian yang diingini tanpa kekangan sistem jenis Go. Walau bagaimanapun, adalah penting untuk menilai sama ada emulasi sedemikian sejajar dengan pendekatan idiomatik dalam Go.

Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Meniru `fmap` Haskell dengan Berkesan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn