這是一種將高階函數的參數給定函數兩次: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
Hooray!讓我們來嘗試一下:
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
爲什麼會出現這種情況我是否導入錯誤join
我找不到另一join
上Hoogle
只要導入'Control.Monad.Instances' - 我認爲那個實例在那裏。 – 2013-04-22 20:02:04
@Thomas如何有選擇地只導入Monad(( - >)r)'實例? – fredoverflow 2013-04-22 20:04:39
@FredOverflow不能有選擇地導入實例。您可以'導入Control.Monad.Instances()',它將導入所有實例,而不是其他任何東西。 – 2013-04-22 20:05:39