繁体   English   中英

编写两个函数时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM