4

ハスケル初心者です。Haskell のライブラリからこの例を理解しようとしています。diagrams具体的には、次のような行があります。

Just t = <thing><thing>タイプはどこですかMaybe (Tree a)

これが何をしているのかわかりません。から値を取得する必要があることは理解していますMaybe。そのコード行を次のように置き換えました

t = fromJust <thing>

そしてそれは同じように機能します。2 つの行に違いはありますか?最初の行が何をしているのか、誰か説明できますか?

4

3 に答える 3

11

fromJust以下とほとんど同じです:

fromJust :: Maybe a -> a
fromJust (Just t) = t

同じパターン マッチであることに注意してください。が であり ではないMaybeことが確実な場合は、 を使用してパターン マッチングなしでその値を取得できますが、ほとんどの場合、マッチングはよりクリーンであるため、ここでは必要ありません。JustNothingfromJust

于 2014-05-22T19:00:13.210 に答える
5

どちらの形式も同じ目的を果たしますが、

予期しないエラーが発生した場合は、パターン マッチング フォームを使用すると、エラーの場所をより正確に把握できます。( fromJustエラー例外はfromJust内からスローされますが、パターン マッチングに失敗すると、不完全なコードのファイル、行、および列が得られます)

$ ghci
Prelude> :m +Data.Maybe

Prelude Data.Maybe> let t = fromJust Nothing
Prelude Data.Maybe> t
*** Exception: Maybe.fromJust: Nothing

Prelude Data.Maybe> let Just t = Nothing
Prelude Data.Maybe> t
*** Exception: <interactive>:7:5-20: Irrefutable pattern failed for pattern Data.Maybe.Just t
于 2014-05-23T16:26:44.793 に答える
1

Maybe型が値を返すことが確実な場合はJust、パターン マッチを実行して値を抽出するだけです。

例:

Just t = Just 3値 3 を に割り当てますt。これをロードしghciて、自分で確認できます。fromJustは同じですが、より機能的なアプリケーションです。

于 2014-05-22T18:59:19.927 に答える