Add all the effects instances for FreshIdT

This commit is contained in:
Ken Micklas 2019-03-09 18:38:55 -05:00
parent c287ab8b59
commit 46db352af8
2 changed files with 26 additions and 0 deletions

View file

@ -2,8 +2,10 @@
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
module Nix.Effects where
@ -11,6 +13,7 @@ import Prelude hiding (putStr, putStrLn, print)
import qualified Prelude
import Control.Monad.Trans
import Control.Monad.State.Strict
import Data.Text (Text)
import qualified Data.Text as T
import Network.HTTP.Client hiding (path)
@ -20,6 +23,7 @@ import Nix.Expr
import Nix.Frames
import Nix.Parser
import Nix.Render
import Nix.Thunk
import Nix.Utils
import Nix.Value
import qualified System.Directory as S
@ -52,6 +56,9 @@ class Monad m => MonadIntrospect m where
default recursiveSize :: (MonadTrans t, MonadIntrospect m', m ~ t m') => a -> m Word
recursiveSize = lift . recursiveSize
instance MonadIntrospect m => MonadIntrospect (StateT s m)
deriving instance MonadIntrospect m => MonadIntrospect (FreshIdT i m)
instance MonadIntrospect IO where
recursiveSize =
#ifdef MIN_VERSION_ghc_datasize
@ -69,6 +76,8 @@ class Monad m => MonadExec m where
default exec' :: (MonadTrans t, MonadExec m', m ~ t m') => [String] -> m (Either ErrorCall NExprLoc)
exec' = lift . exec'
instance MonadExec m => MonadExec (FreshIdT i m)
instance MonadExec IO where
exec' = \case
[] -> return $ Left $ ErrorCall "exec: missing program"
@ -94,6 +103,8 @@ class Monad m => MonadInstantiate m where
default instantiateExpr :: (MonadTrans t, MonadInstantiate m', m ~ t m') => String -> m (Either ErrorCall NExprLoc)
instantiateExpr = lift . instantiateExpr
instance MonadInstantiate m => MonadInstantiate (FreshIdT i m)
instance MonadInstantiate IO where
instantiateExpr expr = do
traceM $ "Executing: "
@ -125,6 +136,8 @@ class Monad m => MonadEnv m where
default getCurrentSystemArch :: (MonadTrans t, MonadEnv m', m ~ t m') => m Text
getCurrentSystemArch = lift getCurrentSystemArch
instance MonadEnv m => MonadEnv (FreshIdT i m)
instance MonadEnv IO where
getEnvVar = lookupEnv
@ -140,6 +153,8 @@ class Monad m => MonadHttp m where
default getURL :: (MonadTrans t, MonadHttp m', m ~ t m') => Text -> m (Either ErrorCall StorePath)
getURL = lift . getURL
instance MonadHttp m => MonadHttp (FreshIdT i m)
instance MonadHttp IO where
getURL url = do
let urlstr = T.unpack url
@ -174,15 +189,23 @@ putStrLn = putStr . (++"\n")
print :: (MonadPutStr m, Show a) => a -> m ()
print = putStrLn . show
instance MonadPutStr m => MonadPutStr (FreshIdT i m)
instance MonadPutStr IO where
putStr = Prelude.putStr
class Monad m => MonadStore m where
-- | Import a path into the nix store, and return the resulting path
addPath' :: FilePath -> m (Either ErrorCall StorePath)
default addPath' :: (MonadTrans t, MonadStore m', m ~ t m') => FilePath -> m (Either ErrorCall StorePath)
addPath' = lift . addPath'
-- | Add a file with the given name and contents to the nix store
toFile_' :: FilePath -> String -> m (Either ErrorCall StorePath)
default toFile_' :: (MonadTrans t, MonadStore m', m ~ t m') => FilePath -> String -> m (Either ErrorCall StorePath)
toFile_' f = lift . toFile_' f
instance MonadStore m => MonadStore (FreshIdT i m)
instance MonadStore IO where
addPath' path = do

View file

@ -23,6 +23,7 @@ import Data.Text.Prettyprint.Doc
import Data.Void
import Debug.Trace
import Nix.Expr.Types.Annotated
import Nix.Thunk
import qualified System.Directory as S
import qualified System.Posix.Files as S
import Text.Megaparsec.Error
@ -57,6 +58,8 @@ class Monad m => MonadFile m where
default getSymbolicLinkStatus :: (MonadTrans t, MonadFile m', m ~ t m') => FilePath -> m S.FileStatus
getSymbolicLinkStatus = lift . getSymbolicLinkStatus
instance MonadFile m => MonadFile (FreshIdT i m)
instance MonadFile IO where
readFile = BS.readFile
listDirectory = S.listDirectory