组合两个函数时出错
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
我为什么会得到这个有什么想法吗?
Any ideas why I get this?
你没有。你写的一切都很好。您可以在任何程序中使用 fooBarCompose bar foo
。
只是,如果你试图在 GHCi 中评估它,它有一个问题:fooBarCompose bar foo
是一个函数。它到底应该如何 显示函数 ?显示所有可能输入和相应结果的详尽列表?显然不可行。 GHCi 使用 print
under the hood, which simply invokes show
。而且,好吧,因为 不可能 显示一个函数,所以它给你一条错误消息,正是这样说的。
OTOH,可以很容易地显示将函数应用于 任何单个值 的结果,例如
> fooBarCompose bar foo 2 -- aka `bar . foo $ 2`
8
我尝试组合两个指定类型的函数。
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
我为什么会得到这个有什么想法吗?
Any ideas why I get this?
你没有。你写的一切都很好。您可以在任何程序中使用 fooBarCompose bar foo
。
只是,如果你试图在 GHCi 中评估它,它有一个问题:fooBarCompose bar foo
是一个函数。它到底应该如何 显示函数 ?显示所有可能输入和相应结果的详尽列表?显然不可行。 GHCi 使用 print
under the hood, which simply invokes show
。而且,好吧,因为 不可能 显示一个函数,所以它给你一条错误消息,正是这样说的。
OTOH,可以很容易地显示将函数应用于 任何单个值 的结果,例如
> fooBarCompose bar foo 2 -- aka `bar . foo $ 2`
8