8

通常はパターン マッチだけでよいことはわかっていますが、次の関数が役立つ場合もあります。

isLeft  = either (const True) (const False)
isRight = either (const False) (const True)

標準ライブラリにそのようなものはありますか?

4

5 に答える 5

13

指摘されているように、標準ライブラリにはそのような関数はなく、さまざまな方法で独自に実装できます。

ただし、「X は標準ライブラリにありますか?」という形式の質問に注意してください。関数の名前がわからなくても、そので検索できるため、Hoogleが最も簡単に答えます。

Hoogle はまた、引数の順序が重要ではないことを認識できるほど賢く、検索した型よりも類似した (たとえば、より一般的な) 型の結果も表示します。

この場合、 を検索しEither a b -> Bool ても有望な一致が得られないため、標準ライブラリに存在しないことを示す良い指標です。

于 2011-08-27T13:51:11.277 に答える
5

いいえ、しかしあなたは書くことができます:

import Data.Either

isLeft = null . rights . return
isRight = null . lefts . return
于 2011-08-27T09:04:28.833 に答える
3

いいえ、ありません。

しかし、これらの関数をさらに簡単に定義できます*:

isLeft (Left _) = True
isLeft _        = False

isRightもちろん、同じことが言えます。

編集: * わかりました、より多くのコード行が必要になるため、それが簡単かどうかは議論の余地があると思います...

于 2011-08-27T08:43:24.797 に答える
2

私の知る限り、標準ライブラリにはこのようなものはありません。ただし、自分で簡単に定義できます。

either l _ (Left  a) = l a
either _ r (Right b) = r b

isLeft (Left _) = True
isLeft _        = False

isRight (Right _) = True
isRight _         = False
于 2011-08-27T09:36:54.920 に答える