[英]Error while composing two functions
我尝试用指定类型组成两个函数。
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
我的模块可以编译,但是在运行时会调用
fooBarCompose bar foo
我收到一个错误:
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
有什么想法我明白这个吗?
有什么想法我明白这个吗?
你不 。 您编写的所有内容都可以正常工作。 您可以在所需的任何程序中使用fooBarCompose bar foo
。
仅当您尝试在GHCi中对其进行评估时,它会出现问题: fooBarCompose bar foo
是一个函数。 应该如何显示功能 ? 显示所有可能的输入和相应结果的详尽列表? 显然不可行。 GHCi在后台使用print
,它仅调用show
。 而且,由于无法显示函数,因此会给您一条错误消息,说明正确的内容。
OTOH,可以轻松显示将函数应用于任何单个值的结果,例如
> fooBarCompose bar foo 2 -- aka `bar . foo $ 2`
8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.