これが私がやろうとしていることです:
justExpose :: Maybe a -> a
justExpose (Just x) = x
justExpose Nothing = -- an empty object of type a
何か案は?
型a
にモノイド構造がある場合は、これを使用できます。
import Data.Monoid
justExpose :: Monoid a => Maybe a -> a
justExpose (Just x) = x
justExpose Nothing = mempty
これのいくつかの例:
λ> let x = Nothing :: Maybe (Sum Int)
λ> justExpose x
Sum {getSum = 0}
λ> justExpose (Just [])
[]
Maybe
ただし、型は多くの状況で非常に役立つことに注意してください。
あなたが求めているのは、他の多くの言語では「null」です。Haskell は、安全ではないため、意図的にそのようなものを提供していません。
次のようにコンパイルするコードを取得できます。
justExpose :: Maybe a -> a
justExpose (Just x) = x
justExpose Nothing = undefined
しかし、これを a で呼び出すとNothing
、名前が示すように値が未定義であるため、実行時例外が発生します。
更新: 何人かが指摘しているように、この機能は によって提供されています。タイプ シグネチャをhoogleData.Maybe.fromJust
で検索すると見つかります。Maybe a -> a