ghci
1Prelude> Just "Hoge" <> Just "Fuga" 2Just "HogeFuga" 3Prelude> Right "Hoge" <> Right "Fuga" 4Right "Hoge"
Either
の<>
演算をMaybe
と同じように使いたいのですが、何か解決策はありますでしょうか?
Haskellは技巧的な方法でいろいろ解決できると感じているので、なにか出来そうではありますが。
余談
EitherはMaybeの一般化ですので、それをコードで表してる方が綺麗な感じがします。
個人的には以下のコードみたいな感じであってほしいです。
ユニット型がMonoidであるという性質も生かせていて、綺麗だと思うのです。
Haskell
1-- import Prelude hiding (Either, Left, Right, Maybe) 2 3data Either l r = Left l | Right r 4type Maybe a = Either () a 5 6instance (Semigroup l, Semigroup r) => Semigroup (Either l r) where 7 Right x <> Right y = Right $ x <> y 8 Right x <> Left _ = Right x 9 Left _ <> Right y = Right y 10 Left x <> Left y = Left $ x <> y 11 12instance (Monoid l, Semigroup r) => Monoid (Either l r) where 13 mempty = Left mempty 14
具体的には、Either
に対して定義されている(|||)
やright
といった関数をMaybe
にもそのまま流用できたりします。
この場合はfromMaybe
やfmap
で充分ではありますが、他に良い例が思いつきませんでした。
これをそのまま使えば良いじゃんって思うかもしれませんが、そうすると他のライブラリと整合性がつかなくて不便です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。