==================== Tidy Core rules ==================== "SPEC $c*> @(ST s) @_" forall (@s) (@r) ($dApplicative :: Applicative (ST s)). $fApplicativeReaderT_$c*> @(ST s) @r $dApplicative = ($fApplicativeReaderT2 @s @r) `cast` (forall (a :: <*>_N) (b :: <*>_N). _R %<'Many>_N ->_R _R %<'Many>_N ->_R _R %<'Many>_N ->_R Sym (N:ST[0] _N _R) ; Sym (N:ReaderT[0] <*>_N _R _R _N) :: Coercible (forall {a} {b}. ReaderT r (ST s) a -> ReaderT r (ST s) b -> r -> STRep s b) (forall {a} {b}. ReaderT r (ST s) a -> ReaderT r (ST s) b -> ReaderT r (ST s) b)) "SPEC $c<$ @(ST s) @_" forall (@s) (@r) ($dFunctor :: Functor (ST s)). $fFunctorReaderT_$c<$ @(ST s) @r $dFunctor = ($fApplicativeReaderT6 @s @r) `cast` (forall (a :: <*>_N) (b :: <*>_N). _R %<'Many>_N ->_R _R %<'Many>_N ->_R _R %<'Many>_N ->_R Sym (N:ST[0] _N _R) ; Sym (N:ReaderT[0] <*>_N _R _R _N) :: Coercible (forall {a} {b}. a -> ReaderT r (ST s) b -> r -> STRep s a) (forall {a} {b}. a -> ReaderT r (ST s) b -> ReaderT r (ST s) a)) "SPEC $c<* @(ST s) @_" forall (@s) (@r) ($dApplicative :: Applicative (ST s)). $fApplicativeReaderT_$c<* @(ST s) @r $dApplicative = ($fApplicativeReaderT1 @s @r) `cast` (forall (a :: <*>_N) (b :: <*>_N). _R %<'Many>_N ->_R _R %<'Many>_N ->_R _R %<'Many>_N ->_R Sym (N:ST[0] _N _R) ; Sym (N:ReaderT[0] <*>_N _R _R _N) :: Coercible (forall {a} {b}. ReaderT r (ST s) a -> ReaderT r (ST s) b -> r -> STRep s a) (forall {a} {b}. ReaderT r (ST s) a -> ReaderT r (ST s) b -> ReaderT r (ST s) a)) "SPEC $c<*> @(ST s) @_" forall (@s) (@r) ($dApplicative :: Applicative (ST s)). $fApplicativeReaderT9 @(ST s) @r $dApplicative = ($fApplicativeReaderT4 @s @r) `cast` (forall (a :: <*>_N) (b :: <*>_N). b)>_R %<'Many>_N ->_R _R %<'Many>_N ->_R _R %<'Many>_N ->_R Sym (N:ST[0] _N _R) :: Coercible (forall {a} {b}. ReaderT r (ST s) (a -> b) -> ReaderT r (ST s) a -> r -> STRep s b) (forall {a} {b}. ReaderT r (ST s) (a -> b) -> ReaderT r (ST s) a -> r -> ST s b)) "SPEC $c>> @(ST s) @_" forall (@s) (@r) ($dMonad :: Monad (ST s)). $fMonadReaderT1 @(ST s) @r $dMonad = $fMonadAbstractIOSTReaderT_$s$c>> @s @r "SPEC $c>>= @(ST s) @_" forall (@s) (@r) ($dMonad :: Monad (ST s)). $fMonadReaderT2 @(ST s) @r $dMonad = ($fMonadAbstractIOSTReaderT2 @s @r) `cast` (forall (a :: <*>_N) (b :: <*>_N). _R %<'Many>_N ->_R ReaderT r (ST s) b>_R %<'Many>_N ->_R _R %<'Many>_N ->_R Sym (N:ST[0] _N _R) :: Coercible (forall {a} {b}. ReaderT r (ST s) a -> (a -> ReaderT r (ST s) b) -> r -> STRep s b) (forall {a} {b}. ReaderT r (ST s) a -> (a -> ReaderT r (ST s) b) -> r -> ST s b)) "SPEC $cfmap @(ST s) @_" forall (@s) (@r) ($dFunctor :: Functor (ST s)). $fFunctorReaderT_$cfmap @(ST s) @r $dFunctor = ($fApplicativeReaderT7 @s @r) `cast` (forall (a :: <*>_N) (b :: <*>_N). b>_R %<'Many>_N ->_R _R %<'Many>_N ->_R _R %<'Many>_N ->_R Sym (N:ST[0] _N _R) ; Sym (N:ReaderT[0] <*>_N _R _R _N) :: Coercible (forall {a} {b}. (a -> b) -> ReaderT r (ST s) a -> r -> STRep s b) (forall {a} {b}. (a -> b) -> ReaderT r (ST s) a -> ReaderT r (ST s) b)) "SPEC $cliftA2 @(ST s) @_" forall (@s) (@r) ($dApplicative :: Applicative (ST s)). $fApplicativeReaderT_$cliftA2 @(ST s) @r $dApplicative = ($fApplicativeReaderT3 @s @r) `cast` (forall (a :: <*>_N) (b :: <*>_N) (c :: <*>_N). b -> c>_R %<'Many>_N ->_R _R %<'Many>_N ->_R _R %<'Many>_N ->_R _R %<'Many>_N ->_R Sym (N:ST[0] _N _R) ; Sym (N:ReaderT[0] <*>_N _R _R _N) :: Coercible (forall {a} {b} {c}. (a -> b -> c) -> ReaderT r (ST s) a -> ReaderT r (ST s) b -> r -> STRep s c) (forall {a} {b} {c}. (a -> b -> c) -> ReaderT r (ST s) a -> ReaderT r (ST s) b -> ReaderT r (ST s) c)) "SPEC $cp1Applicative @(ST s) @_" forall (@s) (@r) ($dApplicative :: Applicative (ST s)). $fApplicativeReaderT_$cp1Applicative @(ST s) @r $dApplicative = $fApplicativeReaderT_$s$fFunctorReaderT @s @r "SPEC $cp1Monad @(ST s) @_" forall (@s) (@r) ($dMonad :: Monad (ST s)). $fMonadReaderT_$cp1Monad @(ST s) @r $dMonad = $fApplicativeReaderT_$s$fApplicativeReaderT @s @r "SPEC $cpure @(ST s) @_" forall (@s) (@r) ($dApplicative :: Applicative (ST s)). $fApplicativeReaderT_$cpure @(ST s) @r $dApplicative = ($fApplicativeReaderT5 @s @r) `cast` (forall (a :: <*>_N). _R %<'Many>_N ->_R _R %<'Many>_N ->_R Sym (N:ST[0] _N _R) ; Sym (N:ReaderT[0] <*>_N _R _R _N) :: Coercible (forall {a}. a -> r -> STRep s a) (forall {a}. a -> ReaderT r (ST s) a)) "SPEC $creturn @(ST s) @_" forall (@s) (@r) ($dMonad :: Monad (ST s)). $fMonadReaderT_$creturn @(ST s) @r $dMonad = ($fApplicativeReaderT5 @s @r) `cast` (forall (a :: <*>_N). _R %<'Many>_N ->_R _R %<'Many>_N ->_R Sym (N:ST[0] _N _R) ; Sym (N:ReaderT[0] <*>_N _R _R _N) :: Coercible (forall {a}. a -> r -> STRep s a) (forall {a}. a -> ReaderT r (ST s) a)) "SPEC $fApplicativeReaderT @(ST s) @_" forall (@s) (@r) ($dApplicative :: Applicative (ST s)). $fApplicativeReaderT @(ST s) @r $dApplicative = $fApplicativeReaderT_$s$fApplicativeReaderT @s @r "SPEC $fFunctorReaderT @(ST s) @_" forall (@s) (@r) ($dFunctor :: Functor (ST s)). $fFunctorReaderT @(ST s) @r $dFunctor = $fApplicativeReaderT_$s$fFunctorReaderT @s @r "SPEC $fMonadReaderT @(ST s) @_" forall (@s) (@r) ($dMonad :: Monad (ST s)). $fMonadReaderT @(ST s) @r $dMonad = $fMonadAbstractIOSTReaderT_$s$fMonadReaderT @s @r "USPEC useAbstractMonad @(ReaderT Int (ST s))" forall (@s) ($dMonadAbstractIOST :: MonadAbstractIOST (ReaderT Int (ST s))). useAbstractMonad @(ReaderT Int (ST s)) $dMonadAbstractIOST = (useAbstractMonad1 @s) `cast` (_R %<'Many>_N ->_R _R %<'Many>_N ->_R Sym (N:ST[0] _N _R) ; Sym (N:ReaderT[0] <*>_N _R _R _N) :: Coercible (Int -> Int -> STRep s Int) (Int -> ReaderT Int (ST s) Int))