1
假設我有以下值構造:爲什麼在值構造函數中聲明的類型在Haskell中不是類型?
data Shape = Circle Float Float Float | Rectangle Float Float Float Float
現在我可以運行:
ghci> :t Circle
Circle :: Float -> Float -> Float -> Shape
現在我可以寫一個類型聲明
surface :: Shape -> Float
但我不能鍵入型號聲明
surface :: Circle -> Float
這is because「Circle
是不是一個類型,Shape
是」
我的問題是:爲什麼在Haskell聲明中值構造不種類型?
「的價值構造函數聲明的類型」。它們不是類型,所以它們絕對不是「在值構造函數中聲明的類型」。他們是數據構造函數。你也不能編寫函數'surface :: 13 - > 1.2'。 – pdexter
'data'的語法是歷史事故。使用GADT語法以更一致的方式爲構造函數提供類型。 – augustss
@augustss ...這不是一個真正的意外 - 我認爲GADT甚至還沒有達到標準(不是太重要) – Carsten