Haskellで書かれた大規模なプロジェクトの一環として、私は自分のコード全体で使用する一般的なパラダイムをカプセル化するための小さなユーティリティライブラリに取り組んでいます。私がしたかった、いずれの場合においてもHaskell:safe 'show'
fromLeft :: Either a b -> a
fromLeft x = case x of
(Left x) -> x
(Right y) -> error "fromLeft: (Right _)"
fromRight :: Either a b -> b
fromRight x = case x of
(Right x) -> x
(Left y) -> error "fromRight: (Left _)"
:私が働いていた一つの関数(むしろ又は二つの機能は、)antichiralコンストラクタに未定義である部分の機能は、(error
は正確には)でありfromLeft :: Either a b -> a
とfromRight :: Either a b -> b
、ありますできるだけこれらの機能を拡張して、各機能の2番目のパターン一致のy
がshow
のタイプのものであれば、"_"
の代わりに印刷されるようにしてください。しかし、シグネチャに制約を置かずにこれらの関数が一般性を失わせるようなことはないという明確な方法はありません。
これらのタイプキャスティングのインスタンスに対してタイプメッシュ機能を選択的に実行し、他のタイプの一般的な結果を返すことができる拡張またはモジュールブードーはありますか?具体的には、無効な機能に \x -> if (showable x) then show x else "_"
[タイプはHaskellでショーのインスタンスであるかどうかを確認してください?](http://stackoverflow.com/questions/35785176/check-whether-a-type-の可能性のある重複is-an-show-in-haskell) –
https://wiki.haskell.org/GHC/AdvancedOverlapには、その問題と解決策があります。私はそれらを実装することをお勧めしません! – ibotty
@ibottyそれは面白そうです。シェアのためにありがとう。しかし、私はあなたの警告に耳を傾けないかもしれません:P – archaephyrryx