Saya tahu bahwa R -> A adalah functor dalam A, dan FMAP = (.) Untuk itu. Ini berarti bahwa ketika saya melakukan FMAP F G, dengan G :: R -> A, F diterapkan pada hasil G segera setelah yang terakhir diberi nilai ...

4
Enlico 5 April 2021, 20:28

2 jawaban

Jawaban Terbaik

r -> b -> c adalah r -> (b -> c) dan jadi (fmap . fmap) (f :: c -> d) (g :: r -> b -> c) :: r -> b -> d:

> foo :: (c -> d) -> (r -> (b -> c)) -> r -> (b -> d) ;
  foo = fmap . fmap

foo :: (c -> d) -> (r -> b -> c) -> r -> b -> d

> bar :: (c -> d) -> (r -> (b -> (t -> c))) -> r -> (b -> (t -> d)) ;
  bar = fmap . fmap . fmap

bar :: (c -> d) -> (r -> b -> t -> c) -> r -> b -> t -> d

Tetapi Anda harus tahu berapa banyak level bersarang di sana, untuk menyusun fmaps sesuai, atau menggunakan pendekatan dari https://stackoverflow.com Anda yang lain - " Thorught-beberapa-bersarang-tingkat "> Pertanyaan terbaru .

3
Will Ness 5 April 2021, 18:09

Jika Anda ingin menerima argumen N dan kemudian mendaftar f, Anda dapat menelepon fmap n kali. Jadi, jika g :: r -> b -> c, lalu

(fmap . fmap) f g

Akan mendaftar f ke nilai tipe c yang dihasilkan dari menerapkan g ke dua argumen, sedangkan jika h :: a -> b -> c -> d -> e -> f -> g, lalu

   a      b      c      d      e      f
(fmap . fmap . fmap . fmap . fmap . fmap) f h

Akan mendaftar f ke nilai tipe g yang dihasilkan dari menerapkan h ke 6 argumen.

3
Daniel Wagner 5 April 2021, 18:05