如何在同一行中声明多个变量的类型

时间:2016-04-18 11:23:19

标签: haskell

假设我的Haskell文件包含以下声明。

a :: Integer
b :: Double
c :: String

a = 10
b = 12.34
c = "Abcd"

我可以将值分配给同一行中的变量,如下所示。

 (a, b, c) = (10, 12.34, "Abcd")

我的问题是,如何在同一行中定义类型签名?

当我使用以下陈述时。

  (a, b, c) :: (Integer, Double, String)

我收到了以下错误。

Invalid type signature: (a, b, c) :: (Integer, Double, String)
    Should be of form <variable> :: <type>

4 个答案:

答案 0 :(得分:7)

如果你真的必须这样做,你可以:

a :: Integer; b :: Double; c :: String
(a, b, c) = (10, 12.34, "Abcd")

虽然我建议你学会喜欢多行,因为这通常是更好的风格。

答案 1 :(得分:3)

(a :: Integer, b :: Double, c :: String) = ...`

应该有效,但可能需要ScopedTypeVariables扩展名。

答案 2 :(得分:2)

如果它们形成一个结构(作为复合物有意义),首先构造它们可能是一个选择:

vals :: (Integer, Double, String)
vals = (10, 12.34, "Abcd")

(a, b, c) = vals

我没有理由不将它们放在单独的行上。

答案 3 :(得分:1)

您可以将绑定和类型声明组合在一行中。

a = 10     :: Int
b = 12.34  :: Double
c = "Abcd" :: String

将两者分开并没什么价值,因为你以后真的不能为这些名字中的任何一个赋予不同的价值。