나는 주위에 내 머리를 얻으려고 노력하고 다음 코드 조각을, 주어진했습니다데이터 형식 생성자의 컨텍스트에서 다른 모나드 및 적용 가능한 바인드/결합자를 이해하고 있습니까?
data MyExample e i = MyExample (CustomMonad e i)
| forall b. MyExample e b :>>= (b -> CustomMonad e b)
| forall b. (MyExample e (b -> a)) :<*> (MyExample e b)
| forall b. (b -> a) :<$> (MyExample e b)
1)
단항 반대로 :>>=
, :<*>
및 :<$>
가 다르게합니까 무엇 바인딩 >>=
exampleFunction :: Int -> Maybe Int
exampleFunction el = Just (el + 100)
main = do
result <- exampleFunction >>= exampleFunction 21
실용적 콤비 <*>
및 <$>
exampleFunction :: Int -> Maybe Int
exampleFunction el = Just el
main = do
result <- pure exampleFunction <$> (+) <*> (ExampleType 2) <*> (ExampleType 4)
2) 바로 말하는 I 오전 다음
이A) MyExample (CustomMonad e i)
전자와 CustomMonad
유형을 건설하고 난 다음 MyExample
맥락에서이 포장?
b) forall b. MyExample e b :>>= (b -> CustomMonad e b)
은 (MyExample e i)
을 취한 다음 b를 취하여 (CustomMonad e b)
을 구성하는 함수 (b -> CustomMonad e b
)에 입력합니까? forall b. (MyExample e (b -> a)) :<*> (MyExample eb)
MyExample
가 값 e
및 기능 (b -> a)
로 구성하고 MyExample e b
일부 실용적 연결자 동작의 종류를수행 복용
c)?
d) forall b. (b -> a) :<$> (MyExample e b)
I는 forall b
의 사용 b
조작 걸쳐 동일한 유형 인 것을 보장한다 말하는 바로 부가 기능 (b -> a)
(MyExample e b)
로 일부 결과를 전달하고 있는가?