Haskell定点签名

yon*_*tix -4 haskell functional-programming

以下Haskell函数的签名是什么:

fix f = f (fix f)
Run Code Online (Sandbox Code Playgroud)

a)((a-> b) - > a-> b) - > a-> b

b)签名无法合成

c)(a-> a) - > a

谢谢!

pha*_*dej 6

这个问题看起来像一个课程作业/测试问题.我会帮你自己找到解决方案:

首先你可能安装了GHC,所以你可以运行ghci一个haskell repl.

关于GHCi的GHC用户指南中一节.但它很长.

如果你启动GHCi,你会得到一个提示,你可以在其中键入Haskell表达式:

Prelude> 1 + 1
2
Prelude> map (\x -> x + x) [1, 2, 3]
[2,4,6]
Run Code Online (Sandbox Code Playgroud)

您还可以将表达式绑定到名称,并定义函数:

Prelude> let fix f = f (fix f)
Run Code Online (Sandbox Code Playgroud)

并且最强大的功能之一是询问表达式的类型:

Prelude> :t map (\x -> x + x)
map (\x -> x + x) :: Num b => [b] -> [b]
Prelude> :t fix
... output omitted
Run Code Online (Sandbox Code Playgroud)

这就是你如何找到问题的解决方案.在您知道之后,您可以问为什么它的类型fix是什么.