2014-12-03 3 views
4

Applicative Programming with Effects는 맥브라이드와 패터슨에서 용지는 sequence 기능을 언급 마지막 줄의 오른쪽면의 유형을 이해하려합니다.구현 ap`

return (:) 'ap' c 'ap' sequence cs에 대한 유형이 통일되는 방식 (올바른 표현이라고 생각합니다)?

return (:)ap의 첫 번째 인수 m (a -> b)과 어떻게 일치하는지 명확하지 않습니다.

ghci> :t return (:) 
return (:) :: Monad m => m (a -> [a] -> [a]) 

답변

7

답변은 ... 카레입니다! ap의 첫 번째 인수는 m (a -> b) 유형이므로이 함수는 유형의 값이 a이고 예상 값은 b 인 값을 나타냅니다. 가능한 한 가능한 은 b이 다른 기능입니다 (즉 b[a] -> [a]과 통합 될 수 있음). 그래서 우리는 물건을 줄 얻을

ap   :: Monad m => m (a -> b  ) -> m a -> m b 
           ========== 
return (:) :: Monad m => m (a -> [a] -> [a]) 

ap 기능은 어떤 맥락에서 함수의 응용 프로그램을 수행하는 상황에서 값 (이 경우 모나드에), 그냥 그렇게 자주 사용되는 일이 일련의 부분 애플리케이션을 수행합니다.