a -> b
と の両方で機能する一般的な構成を定義したいa -> Maybe b
:
class Comp m where
(...) :: m a b -> m b c -> m a c
instance Comp (->) where
(...) = (>>>)
instance Comp (a -> Maybe b) where
(...) = (>=>)
newtype
最近のすべてのGHC拡張機能で、のようなラッパーなしで2番目のインスタンスを定義することは可能Control.Arrow.Kleisli
ですか?
もう 1 つの問題は、インスタンスが重複しているため、Just ... Just
2 つの同等のインスタンスが存在する可能性があることです。再設計することは可能な...
ので、Just ... Just
ポリモーフィック型を持っているので、両方が有効な型付けですか?a -> Maybe (Maybe a)
a -> Maybe a
それが不可能な場合は、何らかの方法で実装の選択を延期することが可能です。例えば
data Comp a b = Comp a b
(...) = Comp
($$$) =
($$$)
一般的な構成 (何でもかまいません - 必ずしも関数ではありません) を関数に持ち上げます。それでJust ... Just $$$ (fromJust . fromJust)