77{-# LANGUAGE MultiParamTypeClasses #-}
88{-# LANGUAGE PolyKinds #-}
99{-# LANGUAGE RankNTypes #-}
10+ {-# LANGUAGE ScopedTypeVariables #-}
1011{-# LANGUAGE StandaloneDeriving #-}
12+ {-# LANGUAGE TypeApplications #-}
1113{-# LANGUAGE UndecidableInstances #-}
1214
1315module Nix.Utils.Fix1 where
@@ -30,6 +32,7 @@ import Control.Monad.Reader ( MonadReader )
3032import Control.Monad.State ( MonadState )
3133
3234
35+
3336-- | The fixpoint combinator, courtesy of Gregory Malecha.
3437-- https://gist.github.com/gmalecha/ceb3778b9fdaa4374976e325ac8feced
3538newtype Fix1 (t :: (k -> * ) -> k -> * ) (a :: k ) = Fix1 { unFix1 :: t (Fix1 t ) a }
@@ -50,6 +53,8 @@ deriving instance MonadState s (t (Fix1 t)) => MonadState s (Fix1 t)
5053newtype Fix1T (t :: (k -> * ) -> (* -> * ) -> k -> * ) (m :: * -> * ) (a :: k )
5154 = Fix1T { unFix1T :: t (Fix1T t m ) m a }
5255
56+ type MonadFix1T t m = (MonadTrans (Fix1T t ), Monad (t (Fix1T t m ) m ))
57+
5358deriving instance Functor (t (Fix1T t m ) m ) => Functor (Fix1T t m )
5459deriving instance Applicative (t (Fix1T t m ) m ) => Applicative (Fix1T t m )
5560deriving instance Alternative (t (Fix1T t m ) m ) => Alternative (Fix1T t m )
@@ -65,8 +70,6 @@ deriving instance MonadMask (t (Fix1T t m) m) => MonadMask (Fix1T t m)
6570deriving instance MonadReader e (t (Fix1T t m ) m ) => MonadReader e (Fix1T t m )
6671deriving instance MonadState s (t (Fix1T t m ) m ) => MonadState s (Fix1T t m )
6772
68- type MonadFix1T t m = (MonadTrans (Fix1T t ), Monad (t (Fix1T t m ) m ))
69-
7073instance (MonadFix1T t m , MonadRef m ) => MonadRef (Fix1T t m ) where
7174 type Ref (Fix1T t m ) = Ref m
7275 newRef = lift . newRef
0 commit comments