Skip to content

Commit aa1b5b1

Browse files
committed
Eliminate use of QuantifiedConstraints to support GHC < 8.6
1 parent a474d77 commit aa1b5b1

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

hnix.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@ library
404404
, binary >= 0.8.5 && < 0.9
405405
, bytestring >= 0.10.8 && < 0.11
406406
, comonad >= 5.0.4 && < 5.1
407+
, constraints >= 0.11 && <0.13
407408
, containers >= 0.5.11.0 && < 0.7
408409
, data-fix >= 0.3.0 && < 0.4
409410
, deepseq >= 1.4.3 && <1.5

src/Nix/Standard.hs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
{-# LANGUAGE FlexibleInstances #-}
66
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
77
{-# LANGUAGE MultiParamTypeClasses #-}
8-
{-# LANGUAGE QuantifiedConstraints #-}
98
{-# LANGUAGE ScopedTypeVariables #-}
109
{-# LANGUAGE StandaloneDeriving #-}
1110
{-# LANGUAGE TypeApplications #-}
@@ -25,6 +24,8 @@ import Control.Monad.Reader
2524
import Control.Monad.Ref
2625
import Control.Monad.State
2726
import Data.Coerce
27+
import Data.Constraint ( (\\) )
28+
import Data.Constraint.Forall ( Forall, inst )
2829
import Data.Functor.Identity
2930
import Data.HashMap.Lazy ( HashMap )
3031
import Data.Text ( Text )
@@ -202,8 +203,12 @@ instance HasCitations1 m v Identity where
202203

203204
type StandardT m = Fix1T StandardTF m
204205

205-
instance (forall m. MonadTrans (t (Fix1T t m))) => MonadTrans (Fix1T t) where
206-
lift = Fix1T . lift
206+
class MonadTrans (t (Fix1T t m)) => TransAtFix1T t m
207+
208+
instance MonadTrans (t (Fix1T t m)) => TransAtFix1T t m
209+
210+
instance Forall (TransAtFix1T t) => MonadTrans (Fix1T t) where
211+
lift (x :: m a) = Fix1T $ (lift \\ inst @(TransAtFix1T t) @m) x
207212

208213
mkStandardT
209214
:: StandardTFInner (Fix1T StandardTF m) m a

src/Nix/Utils/Fix1.hs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
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

1112
module Nix.Utils.Fix1 where
1213

@@ -22,6 +23,9 @@ import Control.Monad.Catch ( MonadCatch
2223
, MonadThrow )
2324
import Control.Monad.Reader ( MonadReader )
2425
import Control.Monad.State ( MonadState )
26+
import Data.Constraint ( (\\) )
27+
import Data.Constraint.Forall ( Forall, inst )
28+
2529

2630
import 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)
6064
deriving instance MonadReader e (t (Fix1T t m) m) => MonadReader e (Fix1T t m)
6165
deriving 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

Comments
 (0)