Functor, Applicative, Monad
2019. 5. 3. 14:49ㆍHaskell
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