为什么Haskell使用 - >而不是=?

Bas*_*ato 8 haskell language-design

为什么Haskell使用" - >"似乎只能使用"="?

例如,这有什么问题?

take m ys               = case (m,ys) of
                            (0,_)       =  []
                            (_,[])      =  []
                            (n,x:xs)    =  x : take (n-1) xs
Run Code Online (Sandbox Code Playgroud)

要么

(\x = x * x)
Run Code Online (Sandbox Code Playgroud)

pig*_*ker 21

写作会很不幸

(0, _) = []
Run Code Online (Sandbox Code Playgroud)

因为那不是真的.

在罗伯特·雷科德(Robert Recorde)的传统中,我们试图只在我们打算让左手边与右手边相等时才写出方程式.所以我们写

dup x = (x, x)
Run Code Online (Sandbox Code Playgroud)

使dup x等于(x, x),或

dup = \ x -> (x, x)
Run Code Online (Sandbox Code Playgroud)

使dup等于映射x到的功能(x, x),但不是

\ x = (x, x)
Run Code Online (Sandbox Code Playgroud)

因为没有办法让自己x平等(x, x).

当我们允许"堕落"时,我们只会略微偏离传统,例如,

f 0 = 1
f n = 2 * f (n - 1)
Run Code Online (Sandbox Code Playgroud)

但只是在第二行有一个无声的"否则"的意义上.

  • 在Haskell委员会(25年前),如果在这种情况下应该有一个非沉默的"否则",那么就会发生很大的争论.Phil Wadler赞成"否则"大多数人都反对. (8认同)