top page > computer > haskell > web_lecture > for_programmer > fromMaybe.html
更新日:
文責: 重城良国

Maybe値からの値のとりだし

はじめに

Maybe型から値をとりだす関数

を学ぶ。

関数fromMaybe

動作

Just値からはなかの値をNothingならデフォルト値を返す。

% ghci
Prelude> :m Data.Maybe
Prelude Data.Maybe> fromMaybe 0 (Just 8)
8
Prelude Data.Maybe> fromMaybe 0 Nothing
0
Prelude Data.Maybe> fromMaybe ' ' (Just 'c')
'c'

最後の例でデフォルト値となっているのは空白文字だ。Haskellでは文字と文字列とは区別される。「文字」は必ずひとつの文字である。

定義

Maybe型の値がJust値ならばなかの値xを、そうでなければ第1引数の値dを返す。

fromMaybe _ (Just x) = x
fromMaybe d _ = d

デフォルト値、Maybe型のなかみ、返り値はすべて同じ型aだ。

fromMaybe :: a -> Maybe a -> a

関数maybe

動作

関数fromMaybeはデフォルト値を決めて値をとりだす。関数maybeはデフォルト値を決めて値に関数を適用する。

% ghci
Prelude> :m Data.Char
Prelude Data.Char> maybe False isLower (Just 'c')
True
Prelude Data.Char> maybe False isLower Nothing
False
Prelude Data.Char> maybe 0 ord (Just 'c')
99
Prelude Data.Char> maybe 0 ord Nothing
0

定義

Maybe型の値がJust値ならばなかみの値xに引数で与えられた関数fを適用する。そうでなければデフォルト値を返す。

maybe _ f (Just x) = f x
maybe d _ _ = d

第2引数はMaybe型のなかみの型aの値を型bの値に変換する関数だ。デフォルト値の型は変換後の値の型と同じ型bだ。返り値も型bだ。

maybe :: b -> (a -> b) -> Maybe a -> b

まとめ

Maybe型から値を取り出す関数を見た。関数fromMaybeとmaybeはデフォルト値を指定することでNothing値に対応する。fromMaybeはそのままの値をとりだす。maybeは関数適用によって値をとりだす。fromMaybeはなかの値をいじらないことで多相性を維持している。maybeでは値の操作を第2引数の関数にまかせることで多相性を維持している。多相関数の多くは引数の関数で値の操作を行う。多相関数の多くは高階関数でもある。

課題

  1. [挑戦問題] 2つのMaybe型の値がともにJust値ならそれらに2引数関数を適用する関数maybe2を定義せよ
  2. [挑戦問題] 関数maybe2の型を示せ

「多相関数とは」へもどる 「そのままにする関数」へ

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics