Hoogle이이 기능을 사용하고 있으며, 동일한 유형의 기능을 찾기위한 올바른 도구라고 할 수 있습니다.
평소와 달리 일반적인 장소에서 나타나지 않는다면 모호한 일부 모듈에서 가져 오기 때문에 직접 작성할 수도 있습니다. 부분적으로는 다른 모든 것들을 가져올 수 없기 때문입니다.
(제외 : 일부 패키지는 hoogle에서 검색 할 수하지 않는 것, 그래서 당신은 기능, 모듈 또는 패키지 이름을 알고있는 경우, 사용 hayoo 당신은 후에이고 hoogle는 알 수 없습니다.)
나는 Control.Monad
에서
(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> (a -> m c)
를 연결하고 싶습니다. 내가 찾았을 때까지 항상 계속해서 원하는 작곡가입니다. 그것은 내 생각에 >>=
보다 모나드로 작업하는 더 자연스러운 방법입니다.
, 그것은 분명 당신도 직접 사용할 수
의 : 당신이 (a -> m a) -> (a -> m a) -> (a -> m a)
에 대한 hoogle 경우
f1234 = f1 >=> f2 >=> f3 >=> f4
그것은 너무 미래 전략은 당신이 뭔가의 목록이다 결합 무언가를 찾고 있다면, 나타 두 가지를 결합하고 fold
기능 중 하나를 사용하는 기능을 검색하십시오.
따라서
chain' :: Monad m => [a -> m a] -> a -> m a
chain' = foldr (>=>) return
f1234 = chain' [f1,f2,f3,f4]
또는
chain'' :: Monad m => a -> [a -> m a] -> m a
chain'' = flip $ foldr (>=>) return
원하는 경우
,하지만 당신은 어쨌든 괜찮습니다.
호크의 대안은 약간의 직감으로 가장 적절한 모듈을 추측 한 다음 문서 페이지를 탐색하는 것입니다. 코드를 단축하는 다른 방법을 찾거나 기억하고 싶은 다른 유용한 기능을 찾을 수 있습니다. 이 전략은 기본 패키지와 가장 잘 작동하며 '추상화'모듈 (예 : Monad 및 Applictive, 이후 고급 Foldable 및 Traversable) 및 매개 변수화 된 패턴과 유사한 데이터 유형 (예 : Maybe, List)에 사용됩니다. 비록 당신이 더 많은 사용 된 데이터 타입 (나를 위해, Map/Set 그리고 나중에 Monad Transformers)을 위해 그것을 할 수는 있지만. – Laar
'chain = foldl (>> =). return '*** *** ***, IMHO. –