就参数的数据类型而言,Haskell 中函数定义中的括号有何意义。
例如:
doStuff Name -> Age -> String
doStuff (NameConstr a) (AgeConstr b) = "Nom: " ++ a ++ ", age: " ++ b
事先在某处定义了以下内容:
data Name = NameConstr String
data Age = AgeConstr Integer
函数参数 a 和 b 是否可以以不需要括号的方式捕获?
仅供引用,我正在解决:
而我似乎还无法掌握这个更精细的细节。
最佳答案
如果没有括号,函数将被视为具有四个参数。不过,我想不出省略括号会导致歧义的反例。
如果需要,您可以按如下方式重新定义类型:
data Name = NameConstr { getName :: String }
data Age = AgeConstr { getAge :: Integer }
这样你的函数就可以变成:
doStuff n a = "Nom: " ++ getName n ++ ", age: " ++ show (getAge a)
(修复了最后一部分;
a
是一个 Integer
并且不能连接到一个字符串)
关于Haskell 数据类型函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15996980/