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

Nano Scheme: Maybe型の演算

(工事中 30%)

Maybe.hs

はじめに

Nano Schemeのなかではエラーの可能性がいたるところにある。構文エラーもあるし値の評価にもエラーがある。エラーの可能性をMaybe値で表す。以下の関数を定義しておく。

% vi Maybe.hs
module Maybe (mapply, mbind) where

mapply :: (a -> b) -> Maybe a -> Maybe b
mapply = maybe Nothing . (Just .)

mbind :: (a -> Maybe b) -> Maybe a -> Maybe b
mbind = maybe Nothing

試してみる

% ghci Maybe.hs
*Maybe> (+ 3) `mapply` Just 8
Just 11
*Maybe> (+ 3) `mapply` Nothing
Nothing

mapplyはmapと似ている。

*Maybe> (+ 3) `map` [8]
[11]
*Maybe> (+ 3) `map` []
[]

mbindも試してみよう。

*Maybe> let safeRecip x = if x == 0 then Nothing else Just $ recip x
*Maybe> safeRecip `mbind` lookup 8 [(3, 5), (8, 2)]
Just 0.5
*Maybe> safeRecip `mbind` lookup 8 [(3, 5), (8, 0)]
Nothing
*Maybe> safeRecip `mbind` lookup 8 [(3, 5), (9, 10)]
Nothing

lookup関数の結果をsafeRecipにわたす。どちらにも「失敗」の可能性がある。どちらかが失敗すれば全体の失敗となる。

まとめ

Maybe値を扱う関数を定義した。失敗の可能性のある演算をつなげていける。

「Nano Scheme: はじめに」へもどる 「Nano Scheme: Map型」へ

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