Functor, Applicative, Monad

2019. 5. 3. 14:49Haskell

Functor는 (일반 함수)를 (래핑된 값)에 적용시킨다.

예: fmap (*3) Just 5 == Just 15

(래핑된 값)에서 (값)을 꺼내고, (일반 함수)를 적용시킨 뒤, 다시 래핑해주는 원리이다.

 

Applicative는 (래핑된 함수)를 (래핑된 값)에 적용시킨다.

예: (Just (+3)) <*> (Just 2) == Just 5

예2: (+) <$> (Just 5) == Just +5 (함수)

<*>는 좌우의 함수와 매개변수를 적용한 값을,

<$>는 좌우의 함수와 매개변수를

합친 함수를 만든다고 보면 된다.

(래핑된 함수)와 (값)을 동시에 꺼내고,

(그 안의 함수)를 적용시킨 뒤, 다시 래핑해주는 원리.

 

Monad의 >>=,

바인드 함수는 (래핑된 값)을 (래핑된 값을 출력하는 함수)에 적용시킨다.

다시 말하자면, (래핑된 값)을 받아서 (일반 값)으로 추출하고,

((일반 값)에 기초로 하며, (래핑된 값)을 출력하는 함수)를 일반 값에 적용한다.

(>>=) = 래핑된 값 -> 일반값

ㄴ 일반 함수

 

 

  • functors: 래핑된 값에 fmap나 <$>등 일반 함수를 적용
  • applicatives: <*>나 liftA등 래핑된 값에 래핑된 함수를 적용
  • monads: 래핑된 값에 >>=나 liftM등 래핑된 값을 출력하는 일반 함수를 적용

 

  • functors: you apply a function to a wrapped value using fmap or <$>
  • applicatives: you apply a wrapped function to a wrapped value using <*> or liftA
  • monads: you apply a function that returns a wrapped value, to a wrapped value using >>= or liftM

http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html?fbclid=IwAR0FWCVQnAEgpXyMGzA3n7WxwSyTAbELHic-cY3q4ynuqUKdPZENLgvyyHM#just-what-is-a-functor-really

'Haskell' 카테고리의 다른 글

하스켈 셋업  (0) 2019.04.01
하스켈 공부  (0) 2019.03.31