位元詩人 Haskell 的資料型態

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

本文說明 Haskell 的資料型態

布林

  • Bool:有 TrueFalse

數字

  • Int:整數。
  • Wood:非負整數。來自於 Data.Wood
  • Integer:大數(任意精確度整數)。
  • Float:單精度浮點數。
  • Double:倍精度浮點數。
  • Ratio:有理數。來自於 Data.Ratio
  • Complex:複數。來自於 Data.Complex

字串

  • Char:Unicode 字元。
  • String:Unicode 字串,內部為 Char 字串。

容器

  • Unit:相當於主流語言的 void
  • 陣列(Array)儲存相同型態值的線性容器,在記憶體中連續分布。
  • 串列(List):儲存相同型態值的線性容器,在記憶體中不連續。
  • 元組(Tuple):用位置儲存一至多個相異型態的值。
  • Record:用欄位儲存多個相異型態的值。

使用者自訂型態

保留字是 data。可宣告 ADT(Algebraic Data Type)。參考以下範例:

data TrafficLight = Red | Yellow | Green

Typeclass

雖然保留字是 class,但在 Haskell 中,相當於資料型態的界面(interface)。Haskell 的 class 和主流語言的 class 意義不同,不要混為一談。

Haskell 有許多內建的 typeclass。資料型態滿足 typeclass 後,就可以像操作內建型態一般操作資料型態,包括運算子重載。例如,實作 Num class 後,就可以用內建運算子進行加、減、乘三種運算。

錯誤處理

  • Maybe:值包在 Just,無法取得值時回傳 Nothing
  • Either:按照慣例,正確值寫在 Right,錯誤值寫在 Left

Either 的設計有缺失。因為 RightLeft 沒限制要放什麼值。若庫開發者不小心把 RightLeft 放反,語意就完全相反。

相較起來,OCamlResult 就明確得多。正確值包在 Ok,錯誤值(通常是字串)包在 Error

關於作者

位元詩人 (ByteBard) 是資訊領域碩士,專注於從探索到產品的開發過程,並以工具驅動的方式改善專案。喜歡以開源專案作為成果,回饋社群。

主要方向包括:自用工具的打磨 (dogfooding)、編譯器技術在工具開發中的應用,以及將研究轉化為可維護的開源成果。

除了技術之外,也喜歡日本料理和黑咖啡,偶爾自助旅行,將生活中的靈感融入技術隨筆。