44{-# LANGUAGE  MultiParamTypeClasses #-}
55{-# LANGUAGE  PolyKinds #-}
66{-# LANGUAGE  RankNTypes #-}
7+ {-# LANGUAGE  ScopedTypeVariables #-}
78{-# LANGUAGE  StandaloneDeriving #-}
9+ {-# LANGUAGE  TypeApplications #-}
810{-# LANGUAGE  UndecidableInstances #-}
9- {-# LANGUAGE  QuantifiedConstraints #-}
1011
1112module  Nix.Utils.Fix1  where 
1213
@@ -22,6 +23,9 @@ import           Control.Monad.Catch            ( MonadCatch
2223                                                , MonadThrow  )
2324import            Control.Monad.Reader            ( MonadReader  )
2425import            Control.Monad.State             ( MonadState  )
26+ import            Data.Constraint                 ( (\\)  )
27+ import            Data.Constraint.Forall          ( Forall , inst  )
28+ 
2529
2630import  Nix.Thunk  -- TODO: Move MonadTransWrap somewhere better, or find something that already exists
2731
@@ -60,8 +64,12 @@ deriving instance MonadMask (t (Fix1T t m) m) => MonadMask (Fix1T t m)
6064deriving  instance  MonadReader  e  (t  (Fix1T  t  m ) m ) =>  MonadReader  e  (Fix1T  t  m )
6165deriving  instance  MonadState  s  (t  (Fix1T  t  m ) m ) =>  MonadState  s  (Fix1T  t  m )
6266
63- instance  (forall  m .  MonadTransWrap  (t  (Fix1T  t  m ))) =>  MonadTransWrap  (Fix1T  t ) where 
64-   liftWrap f (Fix1T  a) =  Fix1T  $  liftWrap f a
67+ class  MonadTransWrap  (t  (Fix1T  t  m )) =>  TransWrapAtFix1T  t  m 
68+ 
69+ instance  MonadTransWrap  (t  (Fix1T  t  m )) =>  TransWrapAtFix1T  t  m 
70+ 
71+ instance  Forall  (TransWrapAtFix1T  t ) =>  MonadTransWrap  (Fix1T  t ) where 
72+   liftWrap (f ::  forall  x .  m  x  ->  m  x ) (Fix1T  (a ::  (t  (Fix1T  t  m ) m  a ))) =  Fix1T  $  liftWrap f a \\  inst @ (TransWrapAtFix1T  t ) @ m 
6573
6674{- 
6775
0 commit comments