如果 haskell 中的每个函数都是柯里化的,那么我为什么不能创建部分对?

gau*_*168 3 haskell currying

菜鸟在这里。我不确定是否每个函数都应该被柯里化(但这就是我的感觉)。

如果确实如此,那又是怎么回事

(,) 1
Run Code Online (Sandbox Code Playgroud)

抛出错误?它不应该返回一个函数,当应用于另一个值时会给出一个元组吗?

Sim*_*ine 14

怎么会(,) 1抛出错误?它不应该返回一个函数[...]吗?

这两个都可以是真的。

?> let f = (,) 1 in f 2
(1,2)
Run Code Online (Sandbox Code Playgroud)

但是由于函数没有Show实例,只是键入(,) 1 确实会引发错误:

?> (,) 1

<interactive>:4:1: error:
    • No instance for (Show (b0 -> (Integer, b0)))
        arising from a use of ‘print’
        (maybe you haven't applied a function to enough arguments?)
    • In a stmt of an interactive GHCi command: print it
Run Code Online (Sandbox Code Playgroud)

  • 只是为了让像我这样的其他菜鸟能够理解它。当输入我在问题中输入的内容时,repl 中的错误不是因为不允许将元组函数应用于单个参数,而是因为 repl 在执行该操作后立即尝试显示结果。结果是一个没有实现 Show 的函数,因此无法显示。 (10认同)
  • @gautam1168 是的,这是正确的。(事实上​​,如果您尝试在 REPL 中显示任何其他函数,您将得到相同的错误。) (8认同)