【问题标题】:Error while composing two functions组合两个函数时出错
【发布时间】:2016-03-13 14:25:25
【问题描述】:

我尝试组合两个指定类型的函数。

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

任何想法为什么我会得到这个?

【问题讨论】:

    标签: haskell function-composition


    【解决方案1】:

    任何想法为什么我会得到这个?

    你没有。你写的一切都很好。你可以在任何你想要的程序中使用fooBarCompose bar foo

    只有,如果你尝试在 GHCi 中评估它,它就有问题:fooBarCompose bar foo 是一个函数。 显示一个函数到底是怎么回事?显示所有可能输入和相应结果的详尽列表?显然不可行。 GHCi 在底层使用print,它只是调用show。而且,因为不可能显示一个函数,它会给你一条错误消息,说明这一点。

    OTOH,将函数应用于任何单个值的结果可以很容易地显示出来,例如

    > fooBarCompose bar foo 2  -- aka `bar . foo $ 2`
    8
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      相关资源
      最近更新 更多