簡體   English   中英

如何在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中,輸入多行輸入需要一些額外的設備 ,通常需要用分號分隔的變體。 機智,那將是

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程序中導入的模塊(它提供BoolEq(.)等的定義)。 GHCi的默認提示包含當前導入的所有模塊的列表,因此默認情況下為Prelude> 但是,如果鍵入import Data.Function ,則提示將變為Prelude Data.Function>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM