Skip to content

Commit

Permalink
Eliminate use of QuantifiedConstraints to support GHC < 8.6
Browse files Browse the repository at this point in the history
  • Loading branch information
ali-abrar committed Jan 9, 2021
1 parent a474d77 commit aa1b5b1
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
1 change: 1 addition & 0 deletions hnix.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,7 @@ library
, binary >= 0.8.5 && < 0.9
, bytestring >= 0.10.8 && < 0.11
, comonad >= 5.0.4 && < 5.1
, constraints >= 0.11 && <0.13
, containers >= 0.5.11.0 && < 0.7
, data-fix >= 0.3.0 && < 0.4
, deepseq >= 1.4.3 && <1.5
Expand Down
11 changes: 8 additions & 3 deletions src/Nix/Standard.hs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
Expand All @@ -25,6 +24,8 @@ import Control.Monad.Reader
import Control.Monad.Ref
import Control.Monad.State
import Data.Coerce
import Data.Constraint ( (\\) )
import Data.Constraint.Forall ( Forall, inst )
import Data.Functor.Identity
import Data.HashMap.Lazy ( HashMap )
import Data.Text ( Text )
Expand Down Expand Up @@ -202,8 +203,12 @@ instance HasCitations1 m v Identity where

type StandardT m = Fix1T StandardTF m

instance (forall m. MonadTrans (t (Fix1T t m))) => MonadTrans (Fix1T t) where
lift = Fix1T . lift
class MonadTrans (t (Fix1T t m)) => TransAtFix1T t m

instance MonadTrans (t (Fix1T t m)) => TransAtFix1T t m

instance Forall (TransAtFix1T t) => MonadTrans (Fix1T t) where
lift (x :: m a) = Fix1T $ (lift \\ inst @(TransAtFix1T t) @m) x

mkStandardT
:: StandardTFInner (Fix1T StandardTF m) m a
Expand Down
14 changes: 11 additions & 3 deletions src/Nix/Utils/Fix1.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE QuantifiedConstraints #-}

module Nix.Utils.Fix1 where

Expand All @@ -22,6 +23,9 @@ import Control.Monad.Catch ( MonadCatch
, MonadThrow )
import Control.Monad.Reader ( MonadReader )
import Control.Monad.State ( MonadState )
import Data.Constraint ( (\\) )
import Data.Constraint.Forall ( Forall, inst )


import Nix.Thunk --TODO: Move MonadTransWrap somewhere better, or find something that already exists

Expand Down Expand Up @@ -60,8 +64,12 @@ deriving instance MonadMask (t (Fix1T t m) m) => MonadMask (Fix1T t m)
deriving instance MonadReader e (t (Fix1T t m) m) => MonadReader e (Fix1T t m)
deriving instance MonadState s (t (Fix1T t m) m) => MonadState s (Fix1T t m)

instance (forall m. MonadTransWrap (t (Fix1T t m))) => MonadTransWrap (Fix1T t) where
liftWrap f (Fix1T a) = Fix1T $ liftWrap f a
class MonadTransWrap (t (Fix1T t m)) => TransWrapAtFix1T t m

instance MonadTransWrap (t (Fix1T t m)) => TransWrapAtFix1T t m

instance Forall (TransWrapAtFix1T t) => MonadTransWrap (Fix1T t) where
liftWrap (f :: forall x. m x -> m x) (Fix1T (a :: (t (Fix1T t m) m a))) = Fix1T $ liftWrap f a \\ inst @(TransWrapAtFix1T t) @m

{-
Expand Down

0 comments on commit aa1b5b1

Please sign in to comment.