このブログ記事では、Haskellの重要なデータ型であるMaybeを紹介します。

Maybe
もし他のプログラミング言語でのコーディング経験があるなら、無数のエラーや例外に遭遇した経験があり、
それらがHaskellでどのように処理されるか疑問に思ったことがあるでしょう。Haskellでは、Maybe
データ型を使用します。
data Maybe = Nothing | Just a
このデータ型は次のように使用できます:
safediv :: Integral a => a -> a -> Maybe a
safediv a b =
if b == 0 then Nothing else Just $ div a b
上記の例からわかるように、ゼロ除算のエラーを防ぐための特別なケースを処理することができます。safediv
の動作は以下の通りです:
safediv 10 2
=> Just 5
safediv 10 0
=> Nothing
素晴らしいですね。
Maybeの関数
HaskellではMaybe
データ型を頻繁に使用するため、便利な定義済み関数がいくつかあります。
import Data.Maybe
isJust :: Maybe a -> Bool
isNothing :: Maybe a -> Bool
fromJust :: Just a -> a
fromJust
を使ってJust
コンストラクタ内の値を取り出すことができますが、誤ってNothing
に対して適用するとエラーになります。
したがって、Data.Maybe
のfromMaybe
を使用できます。fromMaybe
は次のように定義できます。:
fromMaybe :: a -> Maybe a -> a
fromMaybe d x
| isNothing x = d
| otherwise = fromJust x
この関数は、Maybe
の値がNothing
である場合にデフォルト値(d)を提供し、値の安全な取り出しを保証します。もう一つ
事前に定義された便利な関数としてmaybe
があります。
maybe :: b (a -> b) Maybe a b
maybe d f x
| isNothing x = d
| otherwise = f x
fromMaybe
にメカニズムはよく似ていますが、maybe
は関数をJust
に対してのみ直接使用できるため、非常に便利です。
クイズ
この記事では、学習した内容を確認するためのクイズを設けます。記事のメイン部分を読んだ後に、ぜひ自分で問題を解いてみることを強くお勧めします。各問題をクリックすると答えが表示されます。
リソース
- Philipp, Hagenlocher. 2020. Haskell for Imperative Programmers #14 - Maybe. YouTube.