fmap은 왜 function을 두 번째 매개 변수로 사용할 수 있습니까

1246 단어 function
fmap 유형 봐.
 
fmap :: Functor f => (a -> b) -> f a -> f b

분명히 첫 번째 파라미터는function이고, 두 번째 파라미터는functor의instance이다
근데 저희가 이렇게 써요.
ghci> let f = (*5) ghci> let g = (+3) ghci> (fmap f g) 8

그리고 마지막에 55를 얻었어요.
 
이걸 봤을 때 저와 제 친구들이 깜짝 놀랐어요!
털을 위해, 분명히 x->y의 function이야, 털을 위해!!!
 
나중에 구과 선생님의 지시를 받았다
a+b 우리는 (+)ab로 볼 수 있다
동리 a->b는 바로 (->)ab
Int -> Int는 (->) Int Int, (->) Int는 Functor로 볼 수 있습니다.
우리 fmap 좀 봅시다
(a -> b) -> f a -> f b
f를 (->)r로 바꿉니다.
(a -> b) -> ((->) r a) -> ((->) r b)
계속 (->)rx를 r->x로 바꾸면
(a -> b) -> (r -> a) -> (r -> b)
낯이 익어서 나무가 있다!기능 구성 아닌가..
뒤져보니까(->r) instance도 그렇습니다.
instance Functor ((->) r) where   
    fmap = (.)

  

좋은 웹페이지 즐겨찾기