0

「失敗しやすい」データ型から簡単に値を取得したり、失敗した場合にデフォルトを使用したりしたいと考えています。

これが私の実装ですMaybe

infixr 1 <||>
(<||>) :: Maybe a -> a -> a
(<||>) = flip fromMaybe

pred :: String -> String -> Bool
pred x name = (x ==) <$> name `lookup` myMap <||> False

predin にマップされているTrue場合は を返します。namexmyMap

しかし、Haskell ではよくあることですが、私が気付いていない、より抽象的な方法があります。誰?

4

2 に答える 2

0

これが私が思いついたものです:

class Defaultable f where
  infixr 1 <||>
  (<||>) :: f a -> a -> a

instance Defaultable Maybe where
  (<||>) = flip fromMaybe

instance Defaultable (Either a) where
  (Left _)  <||> x = x
  (Right x) <||> _ = x

と組み合わせるとAlternative、可能な選択肢を最後にデフォルトで並べることができます。

于 2014-01-15T18:30:28.577 に答える