2013-04-22 3 views
4

작동하지 않습니다 적용되는 고차 함수를 두 번 주어진 함수에 인수입니다 :lambdabot 가입 제안하지만, 여기에

dapp :: (a -> a -> a) -> a -> a 
dapp = \f x -> f x x 

ghci> dapp (*) 5 
25 

우리가 짧은 것을 할 수 있습니까? 람다봇에게 물어 봅시다 :

lambdabot> @pl \f x -> f x x 
join 

만세!

import Control.Monad (join) 

dapp :: (a -> a -> a) -> a -> a 
dapp = join 

을하지만 그것은 작동하지 않습니다 :(

No instance for (Monad ((->) a)) 
    arising from a use of `join' 
Possible fix: add an instance declaration for (Monad ((->) a)) 
In the expression: join 
In an equation for `dapp': dapp = join 

은 왜 내가 Hoogle 다른 join를 찾을 수 없습니다 내가 잘못된 join을 가져 오는 건가요 발생합니까

을 : 현실을 사용해보십시오?. (->) r에 대한
+7

'Control.Monad.Instances'를 가져 오기만하면됩니다. 인스턴스가 존재한다고 생각합니다. –

+2

@ 토마스 어떻게'Monad ((->) r)'인스턴스 만 선택적으로 가져올 수 있습니까? – fredoverflow

+6

@FredOverflow 인스턴스를 선택적으로 가져올 수 없습니다. 당신은'Control.Monad.Instances()'를 가져올 수 있습니다.이 인스턴스는 모든 인스턴스를 가져오고 다른 것은 가져 오지 않습니다. –

답변

10

Until recentlyFunctorMonad 인스턴스 Control.Monad.Instancesorphan instances이었다.

그러나 base-4.6.0.0 (GHC 7.6.1)부터 시작하여이 인스턴스는 Prelude와 (now empty) has been deprecated으로 옮겨졌습니다.

이러한 인스턴스를 사용하려면 Control.Monad.Instances을 가져 오거나 GHC를 업그레이드하십시오.

+0

hammar에 감사드립니다. 나는 그들이 이미 움직 였다는 것을 몰랐습니다. –

+0

@ ThomasM.DuBuisson : 나도 마찬가지입니다. 어떤 이유로 GHC 7.6.1 릴리스 노트에 언급되지 않았습니다. (http://www.haskell.org/ghc/docs/7.6.1/html/users_guide/ release-7-6-1.html # id9281219). – hammar