3 回答

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
大多數(shù)時(shí)候,您可以依靠類(lèi)型推斷來(lái)為您確定簽名。在您的示例中,以下足夠了:
Prelude> let addTwo x y = x + y
如果您確實(shí)想要帶有類(lèi)型簽名的定義,或者您的定義跨越多行,則可以在ghci中執(zhí)行以下操作:
Prelude> :{
Prelude| let addTwo :: Int -> Int -> Int
Prelude| addTwo x y = x + y
Prelude| :}
Prelude> addTwo 4 7
11
請(qǐng)注意,您也可以將其壓縮到一行:
Prelude> let addTwo :: Int -> Int -> Int ; addTwo x y = x + y
您可以在文檔提示部分的“ 交互評(píng)估”中找到有關(guān)與ghci交互的更多信息。

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
通過(guò)啟動(dòng)GHCI并輸入:set +m以下命令來(lái)解決此問(wèn)題:
Prelude> :set +m
Prelude> let addTwo :: Int -> Int -> Int
Prelude| addTwo x y = x + y
Prelude|
Prelude> addTwo 1 3
4
繁榮。
這里發(fā)生的事情(我主要是在和您聊天,在通過(guò)“ 了解您的Haskell”工作時(shí),正在谷歌上尋求幫助的人)是GHCI是一個(gè)交互式環(huán)境,您可以在其中動(dòng)態(tài)更改函數(shù)名稱(chēng)的綁定。您必須將函數(shù)定義包裝在一個(gè)let塊中,以便Haskell知道您將要定義一些內(nèi)容。這些:set +m東西是多行:{ 代碼 :}構(gòu)造的簡(jiǎn)寫(xiě)。
空格在塊中也很重要,因此您必須在類(lèi)型定義之后縮進(jìn)四個(gè)空格,以說(shuō)明函數(shù)中的四個(gè)空格let。

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
從GHCI版本8.0.1開(kāi)始,let不再需要在REPL上定義功能。
因此,這應(yīng)該適合您:
λ: addTwo x y = x + y
λ: addTwo 1 2
3
λ: :t addTwo
addTwo :: Num a => a -> a -> a
Haskell的類(lèi)型推斷提供了適用于浮點(diǎn)數(shù)的通用類(lèi)型化:
λ: addTwo 2.0 1.0
3.0
如果您必須提供自己的鍵入內(nèi)容,則似乎需要let結(jié)合使用多行輸入(用于:set +m在GHCI中啟用多行輸入):
λ: let addTwo :: Int -> Int -> Int
| addTwo x y = x + y
|
λ: addTwo 1 2
3
但是,如果Int由于非多態(tài)輸入而嘗試傳遞除a以外的任何內(nèi)容,則會(huì)出現(xiàn)錯(cuò)誤:
λ: addTwo 2.0 1.0
<interactive>:34:8: error:
? No instance for (Fractional Int) arising from the literal ‘2.0’
? In the first argument of ‘a(chǎn)ddTwo’, namely ‘2.0’
In the expression: addTwo 2.0 1.0
In an equation for ‘it’: it = addTwo 2.0 1.0
- 3 回答
- 0 關(guān)注
- 709 瀏覽
添加回答
舉報(bào)