[英]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中,輸入多行輸入需要一些額外的設備 ,通常需要用分號分隔的變體。 機智,那將是
let c :: Int ; c = 4
(缺少in
是因為GHCi的行為有點像do
塊; 此堆棧溢出問題具有更多信息。)
但是,它在您的提示下看起來像已打開:set +m
,因此您也可以使用多行選項:
Prelude> let c :: Int
Prelude| c = 4
Prelude|
Prelude>
(此外,如果您想在以后添加類型注釋,則let c = 4 ; c :: Int
可以正常工作;它並不是正在處理的文件的最佳樣式。)
另外,重要的一點是:您沒有使用“ Prelude”,而是使用了GHCi的交互式Haskell環境GHCi 。 Prelude
是默認在所有Haskell程序中導入的模塊(它提供Bool
, Eq
, (.)
等的定義)。 GHCi的默認提示包含當前導入的所有模塊的列表,因此默認情況下為Prelude>
; 但是,如果鍵入import Data.Function
,則提示將變為Prelude Data.Function>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.