Haskellerへの道 #11 - Maybe

Last Edited: 6/24/2024

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

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.MaybefromMaybeを使用できます。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に対してのみ直接使用できるため、非常に便利です。

クイズ

この記事では、学習した内容を確認するためのクイズを設けます。記事のメイン部分を読んだ後に、ぜひ自分で問題を解いてみることを強くお勧めします。各問題をクリックすると答えが表示されます。

リソース