class Alt f where (<+>) :: f a -> f a -> f a instance Alt Maybe where {-# NOINLINE (<+>) #-} l <+> r = l {-# RULES "flatparse/reassoc-alt" forall a. forall (l :: Maybe a) (m :: Maybe a) (r :: Maybe a). l <+> m <+> r = Nothing :: Maybe a #-} main = print $ (Just 1 <+> Just 2) <+> Just 3