想象一个 Haskell 类型
data Person = P String
Run Code Online (Sandbox Code Playgroud)
实例化一个带括号或不带括号的人有区别吗?我真的没有看到任何:
*Main> :t P "Tim"
P "Tim" :: Person
*Main> :t (P "Tim")
(P "Tim") :: Person
*Main> p1 = P "Tim"
*Main> p2 = (P "Tim")
*Main> p1
P "Tim"
*Main> p2
P "Tim"
Run Code Online (Sandbox Code Playgroud)
Haskell 中的括号只有在以下情况下才具有特殊含义
(),当出现在值级别时,或其类型,()出现在类型级别时的单位类型。(1,"bla")或其类型(Int, String)。元组语法也可能出现在约束中;eg(Num a, Ord a)表示基本上Num a ? Ord a,即类型a应该是Num类和Ord类的实例。(+2)(表示\n -> n+2)或前缀化(+) 3 4(表示3+4)。在所有其他情况下,括号仅用于选择所需的优先级,但在其他情况下完全是可选的。特别是,f(x), (f)x, (f x),(f)(x)和((((f))(((x)))))都意味着完全相同的东西,应该简单地写成f x。这适用于函数以及像您的P.