このブログ記事では、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 -> afromJustを使って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 xfromMaybeにメカニズムはよく似ていますが、maybeは関数をJustに対してのみ直接使用できるため、非常に便利です。
クイズ
この記事では、学習した内容を確認するためのクイズを設けます。記事のメイン部分を読んだ後に、ぜひ自分で問題を解いてみることを強くお勧めします。各問題をクリックすると答えが表示されます。
リソース
- Philipp, Hagenlocher. 2020. Haskell for Imperative Programmers #14 - Maybe. YouTube.