3
maybe :: b -> (a -> b) -> Maybe a -> b -- Defined in `Data.Maybe'
從這個定義的也許,B可以是任何類型,應該是相同的類型的函數的返回值(A-> B) 但是,當我在Winghci嘗試這樣做:Haskell中也許起作用困惑
maybe (error "no") (head) (Just "hi")
'h'
maybe (error "no") (return) (Just "hi")
"hi"
這兩部作品,但顯然返回和頭部有不同的類型,但兩者的工作(錯誤「無」) 當我鍵入:
:t error "no"
我得到
error "no" :: a
這是否意味着錯誤「否」可以是任何類型? 這是爲什麼?
是, '錯誤「...」',像'undefined',可以有任何類型。直覺是,無論評估什麼,它永遠都不會有機會看到它(因爲整個計算會中止),所以它從來沒有機會成爲錯誤的類型。 – luqui
是的,'錯誤「否」'可以是任何類型。這是'錯誤'的一點。 '錯誤::字符串 - > a',一種不可恢復的失敗。你是如何在第一時間使用'error'的? – shachaf
@shachaf你的意思是這不是典型的人們如何使用可能或錯誤?我在Haskell教程的其他地方看過這段代碼 – osager