如何在 Haskell 的 "let" 表达式中使用 "type" 定义值?
How do I define a value with "type" in Haskell's "let" expression?
我试图定义一个具有特定类型的值,例如 "Int",但似乎 Prelude 不支持它?
Prelude> let c::Int = 4
Prelude|
<interactive>:49:8:
Illegal type signature: ‘Int’
Perhaps you intended to use ScopedTypeVariables
In a pattern type-signature
Prelude> let [Int]c=4
Prelude|
<interactive>:51:5: Parse error in pattern: [Int]
如何更正?
这样就可以了
let x = 1::Int
在 Haskell 文件中,类型声明与定义分开提供,通常在前一行:
c :: Int -- Type declaration
c = 4 -- Definition
这适用于局部定义,也适用于全局定义;您只需要确保缩进对齐即可。所以在那种情况下,我们有
let c :: Int
c = 4
in c + c
在Haskell中,换行和缩进可以用大括号和分号代替,有时大括号可以省略。在 GHCi 中,输入多行输入需要 some extra machinery,您通常需要分号分隔的变体;也就是说,那将是
let c :: Int ; c = 4
(缺少 in
是因为 GHCi 的行为有点像 do
块;this Stack Overflow question 有更多信息。)
但是,从您的提示看来您已经打开了 :set +m
,因此您也可以使用多行选项:
Prelude> let c :: Int
Prelude| c = 4
Prelude|
Prelude>
(此外,如果您想在之后添加类型注释,let c = 4 ; c :: Int
可以正常工作;它只是不是您正在处理的文件的最佳样式。)
此外,重要说明:您没有使用 "Prelude",您使用的是 GHCi, GHC's interactive Haskell environment. Prelude
is the module that is imported by default in all Haskell programs (it provides the definitions of Bool
, Eq
, (.)
,等等)。 GHCi 的默认提示包含当前导入的所有模块的列表,因此默认为 Prelude>
;但是,如果您键入 import Data.Function
,提示将更改为 Prelude Data.Function>
。
我试图定义一个具有特定类型的值,例如 "Int",但似乎 Prelude 不支持它?
Prelude> let c::Int = 4
Prelude|
<interactive>:49:8:
Illegal type signature: ‘Int’
Perhaps you intended to use ScopedTypeVariables
In a pattern type-signature
Prelude> let [Int]c=4
Prelude|
<interactive>:51:5: Parse error in pattern: [Int]
如何更正?
这样就可以了
let x = 1::Int
在 Haskell 文件中,类型声明与定义分开提供,通常在前一行:
c :: Int -- Type declaration
c = 4 -- Definition
这适用于局部定义,也适用于全局定义;您只需要确保缩进对齐即可。所以在那种情况下,我们有
let c :: Int
c = 4
in c + c
在Haskell中,换行和缩进可以用大括号和分号代替,有时大括号可以省略。在 GHCi 中,输入多行输入需要 some extra machinery,您通常需要分号分隔的变体;也就是说,那将是
let c :: Int ; c = 4
(缺少 in
是因为 GHCi 的行为有点像 do
块;this Stack Overflow question 有更多信息。)
但是,从您的提示看来您已经打开了 :set +m
,因此您也可以使用多行选项:
Prelude> let c :: Int
Prelude| c = 4
Prelude|
Prelude>
(此外,如果您想在之后添加类型注释,let c = 4 ; c :: Int
可以正常工作;它只是不是您正在处理的文件的最佳样式。)
此外,重要说明:您没有使用 "Prelude",您使用的是 GHCi, GHC's interactive Haskell environment. Prelude
is the module that is imported by default in all Haskell programs (it provides the definitions of Bool
, Eq
, (.)
,等等)。 GHCi 的默认提示包含当前导入的所有模块的列表,因此默认为 Prelude>
;但是,如果您键入 import Data.Function
,提示将更改为 Prelude Data.Function>
。