1

データ型がある場合

data Something = foo Integer 
               | bar Bool

とにかく、何かの型をアンラップして整数またはブールだけを取得する「ゲッター」を定義していますか? 今は (foo Integer) と (bar Bool) のようになります。整数値またはブール値が必要です。

4

1 に答える 1

7

まず、タイプミスがあります: データ コンストラクターは大文字でなければなりません:

data Something = Foo Integer
               | Bar Bool

あなたが求めているのは、まさにパターンマッチングの目的です。Somethingという値がある場合s:

case s of
  Foo f -> ... -- f is of type Integer in this "block"
  Bar b -> ... -- b is of type Bool in this "block"

これは、この種のデータ型のゲッターが「間違った」コンストラクターで構築された場合にエラーをスローするため、一般的にこの問題に対処する方法です。これにより、そのケースを処理できます。のようなものを使用して安全なゲッターを作成できますMaybeが、多くの場合、いずれにしてもボイラープレートがさらに必要になります。

于 2016-11-28T06:11:50.933 に答える