假设我的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>
答案 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
将两者分开并没什么价值,因为你以后真的不能为这些名字中的任何一个赋予不同的价值。