2017년 9월 10일 일요일

funtor applicative monad different

*Main> [(\n -> [1..n])] <*> [1..5]
[[1],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5]]
*Main> [1..5] >>= \n -> [1..n]
[1,1,2,1,2,3,1,2,3,4,1,2,3,4,5]
*Main> [(\n -> [1..n])] <*> [1..5]
[[1],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5]]
*Main> fmap (\n -> [1..n]) [1..5]
[[1],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5]]
*Main> fmap [(\n -> [1..n])] [1..5]

:29:6: error:
    • Couldn't match expected type ‘Integer -> b’
                  with actual type ‘[Integer -> [Integer]]’
    • In the first argument of ‘fmap’, namely ‘[(\ n -> [1 .. n])]’
      In the expression: fmap [(\ n -> [1 .. n])] [1 .. 5]
      In an equation for ‘it’: it = fmap [(\ n -> [1 .. n])] [1 .. 5]
    • Relevant bindings include it :: [b] (bound at :29:1)
*Main>



1. Functor 는 [ 함수 ] 에서 함수를 꺼내 적용하는게 불가능
2. Applicative 는 [함수 ] 에서 함수를 꺼내 , 목표 리스트에 각각 적용후 다시 리스트 [ ] 로 감싼다.
3.Monad 는 함수 바인드를 하는데 결과는 같은 타입인 [ a ] 로 나오게 바뀐다.


댓글 없음:

댓글 쓰기