bar*_*ara 0 haskell function-composition
我尝试用类型指定组合两个函数.
foo :: Num a => a -> a
foo a = a + 2
bar :: Num a => a -> a
bar a = a * 2
fooBarCompose :: (Num a, Num b, Num c) => (a -> b) -> (c -> a) -> c -> b
fooBarCompose f g = f . g
Run Code Online (Sandbox Code Playgroud)
我的模块编译,但在运行时我调用
fooBarCompose bar foo
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
No instance for (Show (b0 -> b0))
(maybe you haven't applied enough arguments to a function?)
arising from a use of ‘print’
In the first argument of ‘print’, namely ‘it’
In a stmt of an interactive GHCi command: print it
Run Code Online (Sandbox Code Playgroud)
任何想法为什么我得到这个?
lef*_*out 11
任何想法为什么我得到这个?
你没有.你写的所有东西都很好用.您可以fooBarCompose bar foo
在任何您想要的程序中使用.
只是,如果你试图在GHCi中评估它,它有一个问题:fooBarCompose bar foo
是一个函数.应该如何显示功能呢?显示所有可能输入和相应结果的详尽列表?显然不可行.GHCi print
在引擎盖下使用,它只是引用show
.而且,因为它不可能显示一个函数,它会给出一条错误消息,说明这一点.
OTOH,可以很容易地显示将函数应用于任何单个值的结果,例如
> fooBarCompose bar foo 2 -- aka `bar . foo $ 2`
8
Run Code Online (Sandbox Code Playgroud)