質問

時々私「リストが空の使用でない場合、それはそれ以外の何か他のものを使用し、」「ブール値がfalseでない場合は、」自分はパターンをprogamming見つけるか。

私は「多分」機能が多分にある何ブールとListのための機能を探しています。ある任意の?

アップデート:私は、リスト-例として一般化ブール・ケースを使用することを意味しました。 TとしてData.Textで作業する場合、例えば

if T.null x then x else foo x

私は、このようなボイラープレートコードを減らすために探しています。

役に立ちましたか?

解決

私の答えは、このような汎用的な機能がないということはおそらくだと思います。

:djvが言うように、あなたはおそらく、1を書き込むことData.Monoid上のようなものを構築することができます
maybe' :: (Eq a, Monoid a) => b -> (a -> b) -> a -> b
maybe' repl f x = if x == mempty then repl else f x

しかし、私はそのような標準ライブラリ内の任意の関数を知らない(または簡単にまとめて構成することができることをどれかがそうするように)。

他のヒント

多分たぶん型のcatamorphismがある。

foldrリスト型のcatamorphismです。

あなたは多分同じように使用していた場合:maybe x (const y)

あなたが使用することができますfoldr (const (const y)) x

BOOL Iの場合は、標準ライブラリにcatamorphismを逃したが、それは次のようになります:

bool :: a -> a -> Bool -> a
bool t _ True = t
bool _ f False = f

チェック Data.Monoid に、それはあなたの一般的な関数を記述することで指定された空の値を持っていて、パターン照合できるデータ型を記述する型クラスです。空の値Boolと、空の値FalseListため[]ためのインスタンスがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top