Haskell 数据类型函数参数

标签 haskell types

就参数的数据类型而言,Haskell 中函数定义中的括号有何意义。

例如:

doStuff Name -> Age -> String
doStuff (NameConstr a) (AgeConstr b) = "Nom: " ++ a ++ ", age: " ++ b

事先在某处定义了以下内容:
data Name = NameConstr String
data Age = AgeConstr Integer

函数参数 a 和 b 是否可以以不需要括号的方式捕获?

仅供引用,我正在解决:
  • http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/#type-construction
  • http://learnyouahaskell.com/types-and-typeclasses ,

  • 而我似乎还无法掌握这个更精细的细节。

    最佳答案

    如果没有括号,函数将被视为具有四个参数。不过,我想不出省略括号会导致歧义的反例。

    如果需要,您可以按如下方式重新定义类型:

    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/

    相关文章:

    Haskell Typeclass 速记

    haskell - IO 操作中纯表达式的重复求值

    haskell - 在类型级别未定义

    haskell - 锐化不起作用 - 如何正确地对 Pixel8(Word8) 整数值进行数学运算? - Haskell 中的卷积图像处理

    typescript - 为什么泛型的类型变量通常声明为单个字母(例如 : <T>)?

    list - 关于 Haskell 中的 Church 编码列表

    haskell - 是否可以使用 cabal 将 c 代码与 Haskell 打包?

    c# - 在 C# 中,我可以使用反射来确定枚举类型是 int、byte、short 等吗?

    reactjs - TypeScript 条件类型 : Extract component props type from react component

    haskell - 如何从 Either 中获取值(value)?