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