{-# LANGUAGE DeriveFunctor #-} {-# OPTIONS_GHC -fwarn-noncanonical-monad-instances #-} -- | Test noncanonical-monad-instances warnings module T11128 where import Control.Applicative as A import Control.Monad as M ---------------------------------------------------------------------------- -- minimal definition data T0 a = T0 a deriving Functor instance A.Applicative T0 where pure = T0 (<*>) = M.ap instance M.Monad T0 where (>>=) = undefined ---------------------------------------------------------------------------- -- trigger all 4 warnings data T1 a = T1 a deriving Functor instance A.Applicative T1 where pure = return (<*>) = M.ap (*>) = (M.>>) instance M.Monad T1 where (>>=) = undefined return = T1 (>>) = undefined ---------------------------------------------------------------------------- -- backward compat canonical defintion data T2 a = T2 a deriving Functor instance Applicative T2 where pure = T2 (<*>) = ap (*>) = undefined instance M.Monad T2 where (>>=) = undefined return = pure (>>) = (*>)