在Haskell中绑定部分应用的函数

pla*_*ian 2 haskell partial-application

我是Haskell的新手,所以如果你觉得这个问题很简单,请原谅我:

我如何让GHCi接受这种声明:let foo = fmap (*3) . fmap (+10)

我尝试向foo(let foo :: [Int] -> [Int] =etc)添加一个类型声明,使functor类型显式,但编译器响应Illegal Signature.

谢谢!

编辑 - 显然有很多方法可以做到这一点.我选择了Tikhon的答案,因为他是第一个,而且相当直观.感谢大家!

Dan*_*her 9

要在ghci中给出类型签名,最好的方法,不需要任何扩展,是用分号分隔签名和绑定,

let foo :: Num n => [n] -> [n]; foo = map (*3) . map (+ 10)
Run Code Online (Sandbox Code Playgroud)


Tik*_*vis 5

您可以将表达式(即fmap (* 3) . fmap (+ 10))赋予签名而不是赋予它foo.所以:

let foo = fmap (* 3) . fmap (+ 10) :: [Int] -> [Int]
Run Code Online (Sandbox Code Playgroud)