7
7
{-# LANGUAGE MultiParamTypeClasses #-}
8
8
{-# LANGUAGE PolyKinds #-}
9
9
{-# LANGUAGE RankNTypes #-}
10
+ {-# LANGUAGE ScopedTypeVariables #-}
10
11
{-# LANGUAGE StandaloneDeriving #-}
12
+ {-# LANGUAGE TypeApplications #-}
11
13
{-# LANGUAGE UndecidableInstances #-}
12
14
13
15
module Nix.Utils.Fix1 where
@@ -30,6 +32,7 @@ import Control.Monad.Reader ( MonadReader )
30
32
import Control.Monad.State ( MonadState )
31
33
32
34
35
+
33
36
-- | The fixpoint combinator, courtesy of Gregory Malecha.
34
37
-- https://gist.github.com/gmalecha/ceb3778b9fdaa4374976e325ac8feced
35
38
newtype 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)
50
53
newtype Fix1T (t :: (k -> * ) -> (* -> * ) -> k -> * ) (m :: * -> * ) (a :: k )
51
54
= Fix1T { unFix1T :: t (Fix1T t m ) m a }
52
55
56
+ type MonadFix1T t m = (MonadTrans (Fix1T t ), Monad (t (Fix1T t m ) m ))
57
+
53
58
deriving instance Functor (t (Fix1T t m ) m ) => Functor (Fix1T t m )
54
59
deriving instance Applicative (t (Fix1T t m ) m ) => Applicative (Fix1T t m )
55
60
deriving 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)
65
70
deriving instance MonadReader e (t (Fix1T t m ) m ) => MonadReader e (Fix1T t m )
66
71
deriving instance MonadState s (t (Fix1T t m ) m ) => MonadState s (Fix1T t m )
67
72
68
- type MonadFix1T t m = (MonadTrans (Fix1T t ), Monad (t (Fix1T t m ) m ))
69
-
70
73
instance (MonadFix1T t m , MonadRef m ) => MonadRef (Fix1T t m ) where
71
74
type Ref (Fix1T t m ) = Ref m
72
75
newRef = lift . newRef
0 commit comments