1: (fmap) (const 'p') [Just "a", Nothing, Just "aaa"] 2: (fmap . fmap) (const 'p') [Just "a", Nothing, Just "aaa"] 3: (fmap . fmap . fmap) (const 'p') [Just "a", Nothing, Just "aaa"] 책에 문제로 나오는데, 너무 어려워서 공유함.
[Char], [Maybe Char], [Maybe String] 이거 아닌가
님 ㅈㄴ 똑똑한 듯. 정답!
(fmap . fmap) f 가 fmap (fmap f) 이거랑 같으니
왜 그런지를 설명하거나 이해하려면 머리 아파지는 문제……
이게 아마 자매품일 듯
https://gist.github.com/xnuk/9e9d68c4d5f60bfcfab22bccbc3c5811
eta reduction 미쳤다 미쳤어 ㄷㄷ
해설: (fmap) (const 'p') :: Functor f => f b -> f Char이고 (fmap . fmap) (const 'p') :: (Functor f1, Functor f2) => f1 (f2 a) -> f1 (f2 Char)이고 (fmap . fmap . fmap) (const 'p') :: (Functor f1, Functor f2, Functor f3) => f1 (f2 (f3 a)) -> f1 (f2 (f3 Char))이기 때문이다.
하스켈죽어
완전 포인터 &&**같은 문제네