2

これが私がやろうとしていることです:

justExpose :: Maybe a -> a
justExpose (Just x) = x
justExpose Nothing = -- an empty object of type a

何か案は?

4

4 に答える 4

10

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ただし、型は多くの状況で非常に役立つことに注意してください。

于 2014-12-24T21:16:59.037 に答える
4

あなたが求めているのは、他の多くの言語では「null」です。Haskell は、安全ではないため、意図的にそのようなものを提供していません。

次のようにコンパイルするコードを取得できます。

justExpose :: Maybe a -> a
justExpose (Just x) = x
justExpose Nothing = undefined

しかし、これを a で呼び出すとNothing、名前が示すように値が未定義であるため、実行時例外が発生します。

更新: 何人かが指摘しているように、この機能は によって提供されています。タイプ シグネチャをhoogleData.Maybe.fromJustで検索すると見つかります。Maybe a -> a

于 2014-12-24T21:17:28.753 に答える