{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
module Nix.Exec where
import Prelude hiding ( putStr
, putStrLn
, print
)
import Control.Monad.Catch hiding ( catchJust )
import Control.Monad.Fix
import Data.Fix
import qualified Data.HashMap.Lazy as M
import qualified Data.List.NonEmpty as NE
import qualified Data.Text as Text
import Nix.Atoms
import Nix.Cited
import Nix.Convert
import Nix.Effects
import Nix.Eval as Eval
import Nix.Expr
import Nix.Frames
import Nix.Options
import Nix.Pretty
import Nix.Render
import Nix.Scope
import Nix.String
import Nix.String.Coerce
import Nix.Thunk
import Nix.Utils
import Nix.Value
import Nix.Value.Equal
import Nix.Value.Monad
import Prettyprinter
import qualified Text.Show.Pretty as PS
#ifdef MIN_VERSION_ghc_datasize
import GHC.DataSize
#endif
type MonadCited t f m =
( HasCitations m (NValue t f m) t
, HasCitations1 m (NValue t f m) f
, MonadDataContext f m
)
nvConstantP
:: MonadCited t f m
=> Provenance m (NValue t f m)
-> NAtom
-> NValue t f m
nvConstantP :: Provenance m (NValue t f m) -> NAtom -> NValue t f m
nvConstantP Provenance m (NValue t f m)
p NAtom
x = Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance Provenance m (NValue t f m)
p (NValue t f m -> NValue t f m) -> NValue t f m -> NValue t f m
forall a b. (a -> b) -> a -> b
$ NAtom -> NValue t f m
forall (f :: * -> *) t (m :: * -> *).
Applicative f =>
NAtom -> NValue t f m
nvConstant NAtom
x
nvStrP
:: MonadCited t f m
=> Provenance m (NValue t f m)
-> NixString
-> NValue t f m
nvStrP :: Provenance m (NValue t f m) -> NixString -> NValue t f m
nvStrP Provenance m (NValue t f m)
p NixString
ns = Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance Provenance m (NValue t f m)
p (NValue t f m -> NValue t f m) -> NValue t f m -> NValue t f m
forall a b. (a -> b) -> a -> b
$ NixString -> NValue t f m
forall (f :: * -> *) t (m :: * -> *).
Applicative f =>
NixString -> NValue t f m
nvStr NixString
ns
nvPathP
:: MonadCited t f m
=> Provenance m (NValue t f m)
-> FilePath
-> NValue t f m
nvPathP :: Provenance m (NValue t f m) -> FilePath -> NValue t f m
nvPathP Provenance m (NValue t f m)
p FilePath
x = Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance Provenance m (NValue t f m)
p (NValue t f m -> NValue t f m) -> NValue t f m -> NValue t f m
forall a b. (a -> b) -> a -> b
$ FilePath -> NValue t f m
forall (f :: * -> *) t (m :: * -> *).
Applicative f =>
FilePath -> NValue t f m
nvPath FilePath
x
nvListP
:: MonadCited t f m
=> Provenance m (NValue t f m)
-> [NValue t f m]
-> NValue t f m
nvListP :: Provenance m (NValue t f m) -> [NValue t f m] -> NValue t f m
nvListP Provenance m (NValue t f m)
p [NValue t f m]
l = Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance Provenance m (NValue t f m)
p (NValue t f m -> NValue t f m) -> NValue t f m -> NValue t f m
forall a b. (a -> b) -> a -> b
$ [NValue t f m] -> NValue t f m
forall (f :: * -> *) t (m :: * -> *).
Applicative f =>
[NValue t f m] -> NValue t f m
nvList [NValue t f m]
l
nvSetP
:: MonadCited t f m
=> Provenance m (NValue t f m)
-> AttrSet SourcePos
-> AttrSet (NValue t f m)
-> NValue t f m
nvSetP :: Provenance m (NValue t f m)
-> AttrSet SourcePos -> AttrSet (NValue t f m) -> NValue t f m
nvSetP Provenance m (NValue t f m)
p AttrSet SourcePos
x AttrSet (NValue t f m)
s = Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance Provenance m (NValue t f m)
p (NValue t f m -> NValue t f m) -> NValue t f m -> NValue t f m
forall a b. (a -> b) -> a -> b
$ AttrSet SourcePos -> AttrSet (NValue t f m) -> NValue t f m
forall (f :: * -> *) t (m :: * -> *).
Applicative f =>
AttrSet SourcePos -> AttrSet (NValue t f m) -> NValue t f m
nvSet AttrSet SourcePos
x AttrSet (NValue t f m)
s
nvClosureP
:: MonadCited t f m
=> Provenance m (NValue t f m)
-> Params ()
-> (NValue t f m -> m (NValue t f m))
-> NValue t f m
nvClosureP :: Provenance m (NValue t f m)
-> Params () -> (NValue t f m -> m (NValue t f m)) -> NValue t f m
nvClosureP Provenance m (NValue t f m)
p Params ()
x NValue t f m -> m (NValue t f m)
f = Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance Provenance m (NValue t f m)
p (NValue t f m -> NValue t f m) -> NValue t f m -> NValue t f m
forall a b. (a -> b) -> a -> b
$ Params () -> (NValue t f m -> m (NValue t f m)) -> NValue t f m
forall (f :: * -> *) (m :: * -> *) t.
(Applicative f, Functor m) =>
Params () -> (NValue t f m -> m (NValue t f m)) -> NValue t f m
nvClosure Params ()
x NValue t f m -> m (NValue t f m)
f
nvBuiltinP
:: MonadCited t f m
=> Provenance m (NValue t f m)
-> Text
-> (NValue t f m -> m (NValue t f m))
-> NValue t f m
nvBuiltinP :: Provenance m (NValue t f m)
-> Text -> (NValue t f m -> m (NValue t f m)) -> NValue t f m
nvBuiltinP Provenance m (NValue t f m)
p Text
name NValue t f m -> m (NValue t f m)
f = Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance Provenance m (NValue t f m)
p (NValue t f m -> NValue t f m) -> NValue t f m -> NValue t f m
forall a b. (a -> b) -> a -> b
$ Text -> (NValue t f m -> m (NValue t f m)) -> NValue t f m
forall (f :: * -> *) (m :: * -> *) t.
(Applicative f, Functor m) =>
Text -> (NValue t f m -> m (NValue t f m)) -> NValue t f m
nvBuiltin Text
name NValue t f m -> m (NValue t f m)
f
type MonadCitedThunks t f m =
( MonadThunk t m (NValue t f m)
, MonadDataErrorContext t f m
, HasCitations m (NValue t f m) t
, HasCitations1 m (NValue t f m) f
)
type MonadNix e t f m =
( Has e SrcSpan
, Has e Options
, Scoped (NValue t f m) m
, Framed e m
, MonadFix m
, MonadCatch m
, MonadThrow m
, Alternative m
, MonadEffects t f m
, MonadCitedThunks t f m
, MonadValue (NValue t f m) m
)
data ExecFrame t f m = Assertion SrcSpan (NValue t f m)
deriving (Int -> ExecFrame t f m -> ShowS
[ExecFrame t f m] -> ShowS
ExecFrame t f m -> FilePath
(Int -> ExecFrame t f m -> ShowS)
-> (ExecFrame t f m -> FilePath)
-> ([ExecFrame t f m] -> ShowS)
-> Show (ExecFrame t f m)
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
forall t (f :: * -> *) (m :: * -> *).
(Comonad f, Show t) =>
Int -> ExecFrame t f m -> ShowS
forall t (f :: * -> *) (m :: * -> *).
(Comonad f, Show t) =>
[ExecFrame t f m] -> ShowS
forall t (f :: * -> *) (m :: * -> *).
(Comonad f, Show t) =>
ExecFrame t f m -> FilePath
showList :: [ExecFrame t f m] -> ShowS
$cshowList :: forall t (f :: * -> *) (m :: * -> *).
(Comonad f, Show t) =>
[ExecFrame t f m] -> ShowS
show :: ExecFrame t f m -> FilePath
$cshow :: forall t (f :: * -> *) (m :: * -> *).
(Comonad f, Show t) =>
ExecFrame t f m -> FilePath
showsPrec :: Int -> ExecFrame t f m -> ShowS
$cshowsPrec :: forall t (f :: * -> *) (m :: * -> *).
(Comonad f, Show t) =>
Int -> ExecFrame t f m -> ShowS
Show, Typeable)
instance MonadDataErrorContext t f m => Exception (ExecFrame t f m)
nverr :: forall e t f s m a . (MonadNix e t f m, Exception s) => s -> m a
nverr :: s -> m a
nverr = forall v (m :: * -> *) s a.
(MonadEval v m, Exception s) =>
s -> m a
forall (m :: * -> *) s a.
(MonadEval (NValue t f m) m, Exception s) =>
s -> m a
evalError @(NValue t f m)
currentPos :: forall e m . (MonadReader e m, Has e SrcSpan) => m SrcSpan
currentPos :: m SrcSpan
currentPos = (e -> SrcSpan) -> m SrcSpan
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks ((e -> SrcSpan) -> m SrcSpan) -> (e -> SrcSpan) -> m SrcSpan
forall a b. (a -> b) -> a -> b
$ FoldLike SrcSpan e e SrcSpan SrcSpan -> e -> SrcSpan
forall a s t b. FoldLike a s t a b -> s -> a
view FoldLike SrcSpan e e SrcSpan SrcSpan
forall a b. Has a b => Lens' a b
hasLens
wrapExprLoc :: SrcSpan -> NExprLocF r -> NExprLoc
wrapExprLoc :: SrcSpan -> NExprLocF r -> NExprLoc
wrapExprLoc SrcSpan
span NExprLocF r
x = Compose (Ann SrcSpan) NExprF NExprLoc -> NExprLoc
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (Compose (Ann SrcSpan) NExprF NExprLoc -> NExprLoc)
-> Compose (Ann SrcSpan) NExprF NExprLoc -> NExprLoc
forall a b. (a -> b) -> a -> b
$ Compose (Ann SrcSpan) NExprF NExprLoc -> NExprLoc
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (SrcSpan -> Text -> Compose (Ann SrcSpan) NExprF NExprLoc
forall r. SrcSpan -> Text -> NExprLocF r
NSym_ SrcSpan
span Text
"<?>") NExprLoc -> NExprLocF r -> Compose (Ann SrcSpan) NExprF NExprLoc
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ NExprLocF r
x
{-# inline wrapExprLoc #-}
instance MonadNix e t f m => MonadEval (NValue t f m) m where
freeVariable :: Text -> m (NValue t f m)
freeVariable Text
var =
forall e t (f :: * -> *) s (m :: * -> *) a.
(MonadNix e t f m, Exception s) =>
s -> m a
forall s (m :: * -> *) a.
(MonadNix e t f m, Exception s) =>
s -> m a
nverr @e @t @f (ErrorCall -> m (NValue t f m)) -> ErrorCall -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall (FilePath -> ErrorCall) -> FilePath -> ErrorCall
forall a b. (a -> b) -> a -> b
$ FilePath
"Undefined variable '" FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> Text -> FilePath
forall a. ToString a => a -> FilePath
toString Text
var FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> FilePath
"'"
synHole :: Text -> m (NValue t f m)
synHole Text
name = do
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
forall v (m :: * -> *) s a.
(MonadEval v m, Exception s) =>
s -> m a
forall (m :: * -> *) s a.
(MonadEval (NValue t f m) m, Exception s) =>
s -> m a
evalError @(NValue t f m) (EvalFrame m (NValue t f m) -> m (NValue t f m))
-> EvalFrame m (NValue t f m) -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SynHoleInfo m (NValue t f m) -> EvalFrame m (NValue t f m)
forall (m :: * -> *) v. SynHoleInfo m v -> EvalFrame m v
SynHole (SynHoleInfo m (NValue t f m) -> EvalFrame m (NValue t f m))
-> SynHoleInfo m (NValue t f m) -> EvalFrame m (NValue t f m)
forall a b. (a -> b) -> a -> b
$
SynHoleInfo :: forall (m :: * -> *) v. NExprLoc -> Scopes m v -> SynHoleInfo m v
SynHoleInfo
{ _synHoleInfo_expr :: NExprLoc
_synHoleInfo_expr = Compose (Ann SrcSpan) NExprF NExprLoc -> NExprLoc
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (Compose (Ann SrcSpan) NExprF NExprLoc -> NExprLoc)
-> Compose (Ann SrcSpan) NExprF NExprLoc -> NExprLoc
forall a b. (a -> b) -> a -> b
$ SrcSpan -> Text -> Compose (Ann SrcSpan) NExprF NExprLoc
forall r. SrcSpan -> Text -> NExprLocF r
NSynHole_ SrcSpan
span Text
name
, _synHoleInfo_scope :: Scopes m (NValue t f m)
_synHoleInfo_scope = Scopes m (NValue t f m)
scope
}
attrMissing :: NonEmpty Text -> Maybe (NValue t f m) -> m (NValue t f m)
attrMissing NonEmpty Text
ks Maybe (NValue t f m)
ms =
forall v (m :: * -> *) s a.
(MonadEval v m, Exception s) =>
s -> m a
forall (m :: * -> *) s a.
(MonadEval (NValue t f m) m, Exception s) =>
s -> m a
evalError @(NValue t f m) (ErrorCall -> m (NValue t f m)) -> ErrorCall -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall (FilePath -> ErrorCall) -> FilePath -> ErrorCall
forall a b. (a -> b) -> a -> b
$ Text -> FilePath
forall a. ToString a => a -> FilePath
toString (Text -> FilePath) -> Text -> FilePath
forall a b. (a -> b) -> a -> b
$
Text -> (NValue t f m -> Text) -> Maybe (NValue t f m) -> Text
forall b a. b -> (a -> b) -> Maybe a -> b
maybe
(Text
"Inheriting unknown attribute: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
attr)
(\ NValue t f m
s ->
Text
"Could not look up attribute " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
attr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" in " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Doc Any -> Text
forall b a. (Show a, IsString b) => a -> b
show (NValue t f m -> Doc Any
forall t (f :: * -> *) (m :: * -> *) ann.
MonadDataContext f m =>
NValue t f m -> Doc ann
prettyNValue NValue t f m
s)
)
Maybe (NValue t f m)
ms
where
attr :: Text
attr = Text -> [Text] -> Text
Text.intercalate Text
"." ([Text] -> Text) -> [Text] -> Text
forall a b. (a -> b) -> a -> b
$ NonEmpty Text -> [Text]
forall a. NonEmpty a -> [a]
NE.toList NonEmpty Text
ks
evalCurPos :: m (NValue t f m)
evalCurPos = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
span :: SrcSpan
span@(SrcSpan SourcePos
delta SourcePos
_) <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance @_ @_ @(NValue t f m)
(Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan -> Text -> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> Text -> NExprLocF r
NSym_ SrcSpan
span Text
"__curPos") (NValue t f m -> NValue t f m)
-> m (NValue t f m) -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
SourcePos -> m (NValue t f m)
forall a (m :: * -> *) v. ToValue a m v => a -> m v
toValue SourcePos
delta
evaledSym :: Text -> NValue t f m -> m (NValue t f m)
evaledSym Text
name NValue t f m
val = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
pure $
Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance @_ @_ @(NValue t f m)
(Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan -> Text -> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> Text -> NExprLocF r
NSym_ SrcSpan
span Text
name)
NValue t f m
val
evalConstant :: NAtom -> m (NValue t f m)
evalConstant NAtom
c = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
pure $ Provenance m (NValue t f m) -> NAtom -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NAtom -> NValue t f m
nvConstantP (Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan -> NAtom -> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> NAtom -> NExprLocF r
NConstant_ SrcSpan
span NAtom
c) NAtom
c
evalString :: NString (m (NValue t f m)) -> m (NValue t f m)
evalString =
m (NValue t f m)
-> (NixString -> m (NValue t f m))
-> Maybe NixString
-> m (NValue t f m)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe
(ErrorCall -> m (NValue t f m)
forall e t (f :: * -> *) s (m :: * -> *) a.
(MonadNix e t f m, Exception s) =>
s -> m a
nverr (ErrorCall -> m (NValue t f m)) -> ErrorCall -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall FilePath
"Failed to assemble string")
(\ NixString
ns ->
do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
pure $
Provenance m (NValue t f m) -> NixString -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NixString -> NValue t f m
nvStrP
(Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance
Scopes m (NValue t f m)
scope
(SrcSpan
-> NString (Maybe (NValue t f m))
-> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> NString r -> NExprLocF r
NStr_ SrcSpan
span (NString (Maybe (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)))
-> NString (Maybe (NValue t f m))
-> NExprLocF (Maybe (NValue t f m))
forall a b. (a -> b) -> a -> b
$ [Antiquoted Text (Maybe (NValue t f m))]
-> NString (Maybe (NValue t f m))
forall r. [Antiquoted Text r] -> NString r
DoubleQuoted [Text -> Antiquoted Text (Maybe (NValue t f m))
forall v r. v -> Antiquoted v r
Plain (Text -> Antiquoted Text (Maybe (NValue t f m)))
-> Text -> Antiquoted Text (Maybe (NValue t f m))
forall a b. (a -> b) -> a -> b
$ NixString -> Text
stringIgnoreContext NixString
ns])
)
NixString
ns
)
(Maybe NixString -> m (NValue t f m))
-> (NString (m (NValue t f m)) -> m (Maybe NixString))
-> NString (m (NValue t f m))
-> m (NValue t f m)
forall (m :: * -> *) b c a.
Monad m =>
(b -> m c) -> (a -> m b) -> a -> m c
<=< NString (m (NValue t f m)) -> m (Maybe NixString)
forall v (m :: * -> *).
(MonadEval v m, FromValue NixString m v) =>
NString (m v) -> m (Maybe NixString)
assembleString
evalLiteralPath :: FilePath -> m (NValue t f m)
evalLiteralPath FilePath
p = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
Provenance m (NValue t f m) -> FilePath -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> FilePath -> NValue t f m
nvPathP (Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan -> FilePath -> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> FilePath -> NExprLocF r
NLiteralPath_ SrcSpan
span FilePath
p) (FilePath -> NValue t f m) -> m FilePath -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
FilePath -> m FilePath
forall t (f :: * -> *) (m :: * -> *).
MonadEffects t f m =>
FilePath -> m FilePath
makeAbsolutePath @t @f @m FilePath
p
evalEnvPath :: FilePath -> m (NValue t f m)
evalEnvPath FilePath
p = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
Provenance m (NValue t f m) -> FilePath -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> FilePath -> NValue t f m
nvPathP (Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan -> FilePath -> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> FilePath -> NExprLocF r
NEnvPath_ SrcSpan
span FilePath
p) (FilePath -> NValue t f m) -> m FilePath -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
FilePath -> m FilePath
forall t (f :: * -> *) (m :: * -> *).
MonadEffects t f m =>
FilePath -> m FilePath
findEnvPath @t @f @m FilePath
p
evalUnary :: NUnaryOp -> NValue t f m -> m (NValue t f m)
evalUnary NUnaryOp
op NValue t f m
arg = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
Scopes m (NValue t f m)
-> SrcSpan -> NUnaryOp -> NValue t f m -> m (NValue t f m)
forall e (m :: * -> *) t (f :: * -> *).
(Framed e m, MonadCited t f m, Show t) =>
Scopes m (NValue t f m)
-> SrcSpan -> NUnaryOp -> NValue t f m -> m (NValue t f m)
execUnaryOp Scopes m (NValue t f m)
scope SrcSpan
span NUnaryOp
op NValue t f m
arg
evalBinary :: NBinaryOp -> NValue t f m -> m (NValue t f m) -> m (NValue t f m)
evalBinary NBinaryOp
op NValue t f m
larg m (NValue t f m)
rarg = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
Scopes m (NValue t f m)
-> SrcSpan
-> NBinaryOp
-> NValue t f m
-> m (NValue t f m)
-> m (NValue t f m)
forall e t (f :: * -> *) (m :: * -> *).
(MonadNix e t f m, MonadEval (NValue t f m) m) =>
Scopes m (NValue t f m)
-> SrcSpan
-> NBinaryOp
-> NValue t f m
-> m (NValue t f m)
-> m (NValue t f m)
execBinaryOp Scopes m (NValue t f m)
scope SrcSpan
span NBinaryOp
op NValue t f m
larg m (NValue t f m)
rarg
evalWith :: m (NValue t f m) -> m (NValue t f m) -> m (NValue t f m)
evalWith m (NValue t f m)
c m (NValue t f m)
b = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
let f :: NValue t f m -> NValue t f m
f = (NValue t f m -> NValue t f m -> NValue t f m)
-> NValue t f m -> NValue t f m
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join ((NValue t f m -> NValue t f m -> NValue t f m)
-> NValue t f m -> NValue t f m)
-> (NValue t f m -> NValue t f m -> NValue t f m)
-> NValue t f m
-> NValue t f m
forall a b. (a -> b) -> a -> b
$ Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance (Provenance m (NValue t f m) -> NValue t f m -> NValue t f m)
-> (NValue t f m -> Provenance m (NValue t f m))
-> NValue t f m
-> NValue t f m
-> NValue t f m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> (NValue t f m -> NExprLocF (Maybe (NValue t f m)))
-> NValue t f m
-> Provenance m (NValue t f m)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SrcSpan
-> Maybe (NValue t f m)
-> Maybe (NValue t f m)
-> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> r -> r -> NExprLocF r
NWith_ SrcSpan
span Maybe (NValue t f m)
forall a. Maybe a
Nothing (Maybe (NValue t f m) -> NExprLocF (Maybe (NValue t f m)))
-> (NValue t f m -> Maybe (NValue t f m))
-> NValue t f m
-> NExprLocF (Maybe (NValue t f m))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure
NValue t f m -> NValue t f m
f (NValue t f m -> NValue t f m)
-> m (NValue t f m) -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (NValue t f m) -> m (NValue t f m) -> m (NValue t f m)
forall v (m :: * -> *). MonadNixEval v m => m v -> m v -> m v
evalWithAttrSet m (NValue t f m)
c m (NValue t f m)
b
evalIf :: NValue t f m
-> m (NValue t f m) -> m (NValue t f m) -> m (NValue t f m)
evalIf NValue t f m
c m (NValue t f m)
t m (NValue t f m)
f = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
Bool
b <- NValue t f m -> m Bool
forall a (m :: * -> *) v. FromValue a m v => v -> m a
fromValue NValue t f m
c
let
fun :: Maybe (NValue t f m)
-> Maybe (NValue t f m) -> NValue t f m -> NValue t f m
fun Maybe (NValue t f m)
x Maybe (NValue t f m)
y NValue t f m
z = Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance (Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan
-> Maybe (NValue t f m)
-> Maybe (NValue t f m)
-> Maybe (NValue t f m)
-> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> r -> r -> r -> NExprLocF r
NIf_ SrcSpan
span (NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure NValue t f m
c) Maybe (NValue t f m)
x Maybe (NValue t f m)
y) NValue t f m
z
false :: m (NValue t f m)
false = (NValue t f m -> NValue t f m -> NValue t f m)
-> NValue t f m -> NValue t f m
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (Maybe (NValue t f m)
-> Maybe (NValue t f m) -> NValue t f m -> NValue t f m
fun Maybe (NValue t f m)
forall a. Maybe a
Nothing (Maybe (NValue t f m) -> NValue t f m -> NValue t f m)
-> (NValue t f m -> Maybe (NValue t f m))
-> NValue t f m
-> NValue t f m
-> NValue t f m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure) (NValue t f m -> NValue t f m)
-> m (NValue t f m) -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (NValue t f m)
f
true :: m (NValue t f m)
true = (NValue t f m -> NValue t f m -> NValue t f m)
-> NValue t f m -> NValue t f m
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join ((Maybe (NValue t f m)
-> Maybe (NValue t f m) -> NValue t f m -> NValue t f m)
-> Maybe (NValue t f m)
-> Maybe (NValue t f m)
-> NValue t f m
-> NValue t f m
forall a b c. (a -> b -> c) -> b -> a -> c
flip Maybe (NValue t f m)
-> Maybe (NValue t f m) -> NValue t f m -> NValue t f m
fun Maybe (NValue t f m)
forall a. Maybe a
Nothing (Maybe (NValue t f m) -> NValue t f m -> NValue t f m)
-> (NValue t f m -> Maybe (NValue t f m))
-> NValue t f m
-> NValue t f m
-> NValue t f m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure) (NValue t f m -> NValue t f m)
-> m (NValue t f m) -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (NValue t f m)
t
m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m)
forall a. a -> a -> Bool -> a
bool
m (NValue t f m)
false
m (NValue t f m)
true
Bool
b
evalAssert :: NValue t f m -> m (NValue t f m) -> m (NValue t f m)
evalAssert NValue t f m
c m (NValue t f m)
body =
do
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
Bool
b <- NValue t f m -> m Bool
forall a (m :: * -> *) v. FromValue a m v => v -> m a
fromValue NValue t f m
c
m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m)
forall a. a -> a -> Bool -> a
bool
(ExecFrame t f m -> m (NValue t f m)
forall e t (f :: * -> *) s (m :: * -> *) a.
(MonadNix e t f m, Exception s) =>
s -> m a
nverr (ExecFrame t f m -> m (NValue t f m))
-> ExecFrame t f m -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan -> NValue t f m -> ExecFrame t f m
forall t (f :: * -> *) (m :: * -> *).
SrcSpan -> NValue t f m -> ExecFrame t f m
Assertion SrcSpan
span NValue t f m
c)
(do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
let f :: NValue t f m -> NValue t f m
f = (NValue t f m -> NValue t f m -> NValue t f m)
-> NValue t f m -> NValue t f m
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance (Provenance m (NValue t f m) -> NValue t f m -> NValue t f m)
-> (NValue t f m -> Provenance m (NValue t f m))
-> NValue t f m
-> NValue t f m
-> NValue t f m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> (NValue t f m -> NExprLocF (Maybe (NValue t f m)))
-> NValue t f m
-> Provenance m (NValue t f m)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SrcSpan
-> Maybe (NValue t f m)
-> Maybe (NValue t f m)
-> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> r -> r -> NExprLocF r
NAssert_ SrcSpan
span (NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure NValue t f m
c) (Maybe (NValue t f m) -> NExprLocF (Maybe (NValue t f m)))
-> (NValue t f m -> Maybe (NValue t f m))
-> NValue t f m
-> NExprLocF (Maybe (NValue t f m))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure)
NValue t f m -> NValue t f m
f (NValue t f m -> NValue t f m)
-> m (NValue t f m) -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (NValue t f m)
body
)
Bool
b
evalApp :: NValue t f m -> m (NValue t f m) -> m (NValue t f m)
evalApp NValue t f m
f m (NValue t f m)
x = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
Provenance m (NValue t f m) -> NValue t f m -> NValue t f m
forall (m :: * -> *) v a.
HasCitations m v a =>
Provenance m v -> a -> a
addProvenance (Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan
-> NBinaryOp
-> Maybe (NValue t f m)
-> Maybe (NValue t f m)
-> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> NBinaryOp -> r -> r -> NExprLocF r
NBinary_ SrcSpan
span NBinaryOp
NApp (NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure NValue t f m
f) Maybe (NValue t f m)
forall a. Maybe a
Nothing) (NValue t f m -> NValue t f m)
-> m (NValue t f m) -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
(NValue t f m -> NValue t f m -> m (NValue t f m)
forall e t (f :: * -> *) (m :: * -> *).
MonadNix e t f m =>
NValue t f m -> NValue t f m -> m (NValue t f m)
callFunc NValue t f m
f (NValue t f m -> m (NValue t f m))
-> m (NValue t f m) -> m (NValue t f m)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< m (NValue t f m) -> m (NValue t f m)
forall v (m :: * -> *). MonadValue v m => m v -> m v
defer m (NValue t f m)
x)
evalAbs :: Params (m (NValue t f m))
-> (forall a.
m (NValue t f m)
-> (AttrSet (m (NValue t f m))
-> m (NValue t f m) -> m (a, NValue t f m))
-> m (a, NValue t f m))
-> m (NValue t f m)
evalAbs Params (m (NValue t f m))
p forall a.
m (NValue t f m)
-> (AttrSet (m (NValue t f m))
-> m (NValue t f m) -> m (a, NValue t f m))
-> m (a, NValue t f m)
k = do
Scopes m (NValue t f m)
scope <- m (Scopes m (NValue t f m))
forall a (m :: * -> *). Scoped a m => m (Scopes m a)
currentScopes
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
pure $
Provenance m (NValue t f m)
-> Params () -> (NValue t f m -> m (NValue t f m)) -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m)
-> Params () -> (NValue t f m -> m (NValue t f m)) -> NValue t f m
nvClosureP
(Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan
-> Params (Maybe (NValue t f m))
-> Maybe (NValue t f m)
-> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> Params r -> r -> NExprLocF r
NAbs_ SrcSpan
span (Maybe (NValue t f m)
forall a. Maybe a
Nothing Maybe (NValue t f m)
-> Params (m (NValue t f m)) -> Params (Maybe (NValue t f m))
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Params (m (NValue t f m))
p) Maybe (NValue t f m)
forall a. Maybe a
Nothing)
(Params (m (NValue t f m)) -> Params ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void Params (m (NValue t f m))
p)
(\NValue t f m
arg -> ((), NValue t f m) -> NValue t f m
forall a b. (a, b) -> b
snd (((), NValue t f m) -> NValue t f m)
-> m ((), NValue t f m) -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (NValue t f m)
-> (AttrSet (m (NValue t f m))
-> m (NValue t f m) -> m ((), NValue t f m))
-> m ((), NValue t f m)
forall a.
m (NValue t f m)
-> (AttrSet (m (NValue t f m))
-> m (NValue t f m) -> m (a, NValue t f m))
-> m (a, NValue t f m)
k (NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure NValue t f m
arg) (\AttrSet (m (NValue t f m))
_ m (NValue t f m)
b -> ((), ) (NValue t f m -> ((), NValue t f m))
-> m (NValue t f m) -> m ((), NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (NValue t f m)
b))
evalError :: s -> m a
evalError = s -> m a
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError
infixl 1 `callFunc`
callFunc
:: forall e t f m
. MonadNix e t f m
=> NValue t f m
-> NValue t f m
-> m (NValue t f m)
callFunc :: NValue t f m -> NValue t f m -> m (NValue t f m)
callFunc NValue t f m
fun NValue t f m
arg =
do
Frames
frames :: Frames <- (e -> Frames) -> m Frames
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks ((e -> Frames) -> m Frames) -> (e -> Frames) -> m Frames
forall a b. (a -> b) -> a -> b
$ FoldLike Frames e e Frames Frames -> e -> Frames
forall a s t b. FoldLike a s t a b -> s -> a
view FoldLike Frames e e Frames Frames
forall a b. Has a b => Lens' a b
hasLens
Bool -> m () -> m ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Frames -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length Frames
frames Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
2000) (m () -> m ()) -> m () -> m ()
forall a b. (a -> b) -> a -> b
$ ErrorCall -> m ()
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError (ErrorCall -> m ()) -> ErrorCall -> m ()
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall FilePath
"Function call stack exhausted"
NValue t f m
fun' <- NValue t f m -> m (NValue t f m)
forall v (m :: * -> *). MonadValue v m => v -> m v
demand NValue t f m
fun
case NValue t f m
fun' of
NVClosure Params ()
_params NValue t f m -> m (NValue t f m)
f -> NValue t f m -> m (NValue t f m)
f NValue t f m
arg
NVBuiltin Text
name NValue t f m -> m (NValue t f m)
f ->
do
SrcSpan
span <- m SrcSpan
forall e (m :: * -> *).
(MonadReader e m, Has e SrcSpan) =>
m SrcSpan
currentPos
NixLevel
-> EvalFrame m (NValue t f m)
-> m (NValue t f m)
-> m (NValue t f m)
forall s e (m :: * -> *) a.
(Framed e m, Exception s) =>
NixLevel -> s -> m a -> m a
withFrame NixLevel
Info ((Text -> SrcSpan -> EvalFrame m (NValue t f m)
forall (m :: * -> *) v. Text -> SrcSpan -> EvalFrame m v
Calling @m @(NValue t f m)) Text
name SrcSpan
span) (m (NValue t f m) -> m (NValue t f m))
-> m (NValue t f m) -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ NValue t f m -> m (NValue t f m)
f NValue t f m
arg
(NVSet AttrSet (NValue t f m)
m AttrSet SourcePos
_) | Just NValue t f m
f <- Text -> AttrSet (NValue t f m) -> Maybe (NValue t f m)
forall k v. (Eq k, Hashable k) => k -> HashMap k v -> Maybe v
M.lookup Text
"__functor" AttrSet (NValue t f m)
m ->
(NValue t f m -> NValue t f m -> m (NValue t f m)
forall e t (f :: * -> *) (m :: * -> *).
MonadNix e t f m =>
NValue t f m -> NValue t f m -> m (NValue t f m)
`callFunc` NValue t f m
arg) (NValue t f m -> m (NValue t f m))
-> m (NValue t f m) -> m (NValue t f m)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (NValue t f m -> NValue t f m -> m (NValue t f m)
forall e t (f :: * -> *) (m :: * -> *).
MonadNix e t f m =>
NValue t f m -> NValue t f m -> m (NValue t f m)
`callFunc` NValue t f m
fun') (NValue t f m -> m (NValue t f m))
-> m (NValue t f m) -> m (NValue t f m)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< NValue t f m -> m (NValue t f m)
forall v (m :: * -> *). MonadValue v m => v -> m v
demand NValue t f m
f
NValue t f m
_x -> ErrorCall -> m (NValue t f m)
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError (ErrorCall -> m (NValue t f m)) -> ErrorCall -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall (FilePath -> ErrorCall) -> FilePath -> ErrorCall
forall a b. (a -> b) -> a -> b
$ FilePath
"Attempt to call non-function: " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> NValue t f m -> FilePath
forall b a. (Show a, IsString b) => a -> b
show NValue t f m
_x
execUnaryOp
:: (Framed e m, MonadCited t f m, Show t)
=> Scopes m (NValue t f m)
-> SrcSpan
-> NUnaryOp
-> NValue t f m
-> m (NValue t f m)
execUnaryOp :: Scopes m (NValue t f m)
-> SrcSpan -> NUnaryOp -> NValue t f m -> m (NValue t f m)
execUnaryOp Scopes m (NValue t f m)
scope SrcSpan
span NUnaryOp
op NValue t f m
arg = do
case NValue t f m
arg of
NVConstant NAtom
c ->
case (NUnaryOp
op, NAtom
c) of
(NUnaryOp
NNeg, NInt Integer
i) -> NAtom -> m (NValue t f m)
unaryOp (NAtom -> m (NValue t f m)) -> NAtom -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Integer -> NAtom
NInt ( - Integer
i)
(NUnaryOp
NNeg, NFloat Float
f) -> NAtom -> m (NValue t f m)
unaryOp (NAtom -> m (NValue t f m)) -> NAtom -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Float -> NAtom
NFloat ( - Float
f)
(NUnaryOp
NNot, NBool Bool
b) -> NAtom -> m (NValue t f m)
unaryOp (NAtom -> m (NValue t f m)) -> NAtom -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Bool -> NAtom
NBool (Bool -> Bool
not Bool
b)
(NUnaryOp, NAtom)
_seq ->
ErrorCall -> m (NValue t f m)
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError (ErrorCall -> m (NValue t f m)) -> ErrorCall -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall (FilePath -> ErrorCall) -> FilePath -> ErrorCall
forall a b. (a -> b) -> a -> b
$ FilePath
"unsupported argument type for unary operator " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> (NUnaryOp, NAtom) -> FilePath
forall b a. (Show a, IsString b) => a -> b
show (NUnaryOp, NAtom)
_seq
NValue t f m
_x ->
ErrorCall -> m (NValue t f m)
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError (ErrorCall -> m (NValue t f m)) -> ErrorCall -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall (FilePath -> ErrorCall) -> FilePath -> ErrorCall
forall a b. (a -> b) -> a -> b
$ FilePath
"argument to unary operator must evaluate to an atomic type: " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> NValue t f m -> FilePath
forall b a. (Show a, IsString b) => a -> b
show NValue t f m
_x
where
unaryOp :: NAtom -> m (NValue t f m)
unaryOp = NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NValue t f m -> m (NValue t f m))
-> (NAtom -> NValue t f m) -> NAtom -> m (NValue t f m)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Provenance m (NValue t f m) -> NAtom -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NAtom -> NValue t f m
nvConstantP (Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan
-> NUnaryOp
-> Maybe (NValue t f m)
-> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> NUnaryOp -> r -> NExprLocF r
NUnary_ SrcSpan
span NUnaryOp
op (Maybe (NValue t f m) -> NExprLocF (Maybe (NValue t f m)))
-> Maybe (NValue t f m) -> NExprLocF (Maybe (NValue t f m))
forall a b. (a -> b) -> a -> b
$ NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure NValue t f m
arg)
execBinaryOp
:: forall e t f m
. (MonadNix e t f m, MonadEval (NValue t f m) m)
=> Scopes m (NValue t f m)
-> SrcSpan
-> NBinaryOp
-> NValue t f m
-> m (NValue t f m)
-> m (NValue t f m)
execBinaryOp :: Scopes m (NValue t f m)
-> SrcSpan
-> NBinaryOp
-> NValue t f m
-> m (NValue t f m)
-> m (NValue t f m)
execBinaryOp Scopes m (NValue t f m)
scope SrcSpan
span NBinaryOp
op NValue t f m
lval m (NValue t f m)
rarg =
case NBinaryOp
op of
NBinaryOp
NEq -> (Bool -> Bool) -> m (NValue t f m)
helperEq Bool -> Bool
forall a. a -> a
id
NBinaryOp
NNEq -> (Bool -> Bool) -> m (NValue t f m)
helperEq Bool -> Bool
not
NBinaryOp
NOr -> ((m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m))
-> m (NValue t f m)
-> m (NValue t f m)
-> Bool
-> m (NValue t f m))
-> Bool -> m (NValue t f m)
helperLogic (m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m))
-> m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m)
forall a b c. (a -> b -> c) -> b -> a -> c
flip Bool
True
NBinaryOp
NAnd -> ((m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m))
-> m (NValue t f m)
-> m (NValue t f m)
-> Bool
-> m (NValue t f m))
-> Bool -> m (NValue t f m)
helperLogic (m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m))
-> m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m)
forall a. a -> a
id Bool
False
NBinaryOp
NImpl -> ((m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m))
-> m (NValue t f m)
-> m (NValue t f m)
-> Bool
-> m (NValue t f m))
-> Bool -> m (NValue t f m)
helperLogic (m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m))
-> m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m)
forall a. a -> a
id Bool
True
NBinaryOp
_ ->
do
NValue t f m
rval <- m (NValue t f m)
rarg
NValue t f m
rval' <- NValue t f m -> m (NValue t f m)
forall v (m :: * -> *). MonadValue v m => v -> m v
demand NValue t f m
rval
NValue t f m
lval' <- NValue t f m -> m (NValue t f m)
forall v (m :: * -> *). MonadValue v m => v -> m v
demand NValue t f m
lval
Scopes m (NValue t f m)
-> SrcSpan
-> NBinaryOp
-> NValue t f m
-> NValue t f m
-> m (NValue t f m)
forall e t (f :: * -> *) (m :: * -> *).
(MonadNix e t f m, MonadEval (NValue t f m) m) =>
Scopes m (NValue t f m)
-> SrcSpan
-> NBinaryOp
-> NValue t f m
-> NValue t f m
-> m (NValue t f m)
execBinaryOpForced Scopes m (NValue t f m)
scope SrcSpan
span NBinaryOp
op NValue t f m
lval' NValue t f m
rval'
where
helperEq :: (Bool -> Bool) -> m (NValue t f m)
helperEq Bool -> Bool
flag =
do
NValue t f m
rval <- m (NValue t f m)
rarg
Bool
eq <- NValue t f m -> NValue t f m -> m Bool
forall t (m :: * -> *) (f :: * -> *).
(MonadThunk t m (NValue t f m), Comonad f) =>
NValue t f m -> NValue t f m -> m Bool
valueEqM NValue t f m
lval NValue t f m
rval
NValue t f m -> Bool -> m (NValue t f m)
boolOp NValue t f m
rval (Bool -> m (NValue t f m)) -> Bool -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Bool -> Bool
flag Bool
eq
helperLogic :: ((m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m))
-> m (NValue t f m)
-> m (NValue t f m)
-> Bool
-> m (NValue t f m))
-> Bool -> m (NValue t f m)
helperLogic (m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m))
-> m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m)
flp Bool
flag =
(m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m))
-> m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m)
flp m (NValue t f m) -> m (NValue t f m) -> Bool -> m (NValue t f m)
forall a. a -> a -> Bool -> a
bool
(Bool -> m (NValue t f m)
bypass Bool
flag)
(do
NValue t f m
rval <- m (NValue t f m)
rarg
Bool
x <- NValue t f m -> m Bool
forall a (m :: * -> *) v. FromValue a m v => v -> m a
fromValue NValue t f m
rval
NValue t f m -> Bool -> m (NValue t f m)
boolOp NValue t f m
rval Bool
x
)
(Bool -> m (NValue t f m)) -> m Bool -> m (NValue t f m)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< NValue t f m -> m Bool
forall a (m :: * -> *) v. FromValue a m v => v -> m a
fromValue NValue t f m
lval
boolOp :: NValue t f m -> Bool -> m (NValue t f m)
boolOp NValue t f m
rval = Maybe (NValue t f m) -> Bool -> m (NValue t f m)
toBoolOp (Maybe (NValue t f m) -> Bool -> m (NValue t f m))
-> Maybe (NValue t f m) -> Bool -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure NValue t f m
rval
bypass :: Bool -> m (NValue t f m)
bypass = Maybe (NValue t f m) -> Bool -> m (NValue t f m)
toBoolOp Maybe (NValue t f m)
forall a. Maybe a
Nothing
toBoolOp :: Maybe (NValue t f m) -> Bool -> m (NValue t f m)
toBoolOp :: Maybe (NValue t f m) -> Bool -> m (NValue t f m)
toBoolOp Maybe (NValue t f m)
r Bool
b =
NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NValue t f m -> m (NValue t f m))
-> NValue t f m -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$
Provenance m (NValue t f m) -> NAtom -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NAtom -> NValue t f m
nvConstantP
(Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan
-> NBinaryOp
-> Maybe (NValue t f m)
-> Maybe (NValue t f m)
-> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> NBinaryOp -> r -> r -> NExprLocF r
NBinary_ SrcSpan
span NBinaryOp
op (NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure NValue t f m
lval) Maybe (NValue t f m)
r)
(Bool -> NAtom
NBool Bool
b)
execBinaryOpForced
:: forall e t f m
. (MonadNix e t f m, MonadEval (NValue t f m) m)
=> Scopes m (NValue t f m)
-> SrcSpan
-> NBinaryOp
-> NValue t f m
-> NValue t f m
-> m (NValue t f m)
execBinaryOpForced :: Scopes m (NValue t f m)
-> SrcSpan
-> NBinaryOp
-> NValue t f m
-> NValue t f m
-> m (NValue t f m)
execBinaryOpForced Scopes m (NValue t f m)
scope SrcSpan
span NBinaryOp
op NValue t f m
lval NValue t f m
rval = case NBinaryOp
op of
NBinaryOp
NLt -> (forall a. Ord a => a -> a -> Bool) -> m (NValue t f m)
compare forall a. Ord a => a -> a -> Bool
(<)
NBinaryOp
NLte -> (forall a. Ord a => a -> a -> Bool) -> m (NValue t f m)
compare forall a. Ord a => a -> a -> Bool
(<=)
NBinaryOp
NGt -> (forall a. Ord a => a -> a -> Bool) -> m (NValue t f m)
compare forall a. Ord a => a -> a -> Bool
(>)
NBinaryOp
NGte -> (forall a. Ord a => a -> a -> Bool) -> m (NValue t f m)
compare forall a. Ord a => a -> a -> Bool
(>=)
NBinaryOp
NMinus -> (forall a. Num a => a -> a -> a) -> m (NValue t f m)
numBinOp (-)
NBinaryOp
NMult -> (forall a. Num a => a -> a -> a) -> m (NValue t f m)
numBinOp forall a. Num a => a -> a -> a
(*)
NBinaryOp
NDiv -> (Integer -> Integer -> Integer)
-> (Float -> Float -> Float) -> m (NValue t f m)
numBinOp' Integer -> Integer -> Integer
forall a. Integral a => a -> a -> a
div Float -> Float -> Float
forall a. Fractional a => a -> a -> a
(/)
NBinaryOp
NConcat ->
case (NValue t f m
lval, NValue t f m
rval) of
(NVList [NValue t f m]
ls, NVList [NValue t f m]
rs) -> NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NValue t f m -> m (NValue t f m))
-> NValue t f m -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Provenance m (NValue t f m) -> [NValue t f m] -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> [NValue t f m] -> NValue t f m
nvListP Provenance m (NValue t f m)
prov ([NValue t f m] -> NValue t f m) -> [NValue t f m] -> NValue t f m
forall a b. (a -> b) -> a -> b
$ [NValue t f m]
ls [NValue t f m] -> [NValue t f m] -> [NValue t f m]
forall a. Semigroup a => a -> a -> a
<> [NValue t f m]
rs
(NValue t f m, NValue t f m)
_ -> m (NValue t f m)
unsupportedTypes
NBinaryOp
NUpdate ->
case (NValue t f m
lval, NValue t f m
rval) of
(NVSet AttrSet (NValue t f m)
ls AttrSet SourcePos
lp, NVSet AttrSet (NValue t f m)
rs AttrSet SourcePos
rp) -> NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NValue t f m -> m (NValue t f m))
-> NValue t f m -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Provenance m (NValue t f m)
-> AttrSet SourcePos -> AttrSet (NValue t f m) -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m)
-> AttrSet SourcePos -> AttrSet (NValue t f m) -> NValue t f m
nvSetP Provenance m (NValue t f m)
prov (AttrSet SourcePos
rp AttrSet SourcePos -> AttrSet SourcePos -> AttrSet SourcePos
forall a. Semigroup a => a -> a -> a
<> AttrSet SourcePos
lp) (AttrSet (NValue t f m)
rs AttrSet (NValue t f m)
-> AttrSet (NValue t f m) -> AttrSet (NValue t f m)
forall a. Semigroup a => a -> a -> a
<> AttrSet (NValue t f m)
ls)
(NVSet AttrSet (NValue t f m)
ls AttrSet SourcePos
lp, NVConstant NAtom
NNull) -> NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NValue t f m -> m (NValue t f m))
-> NValue t f m -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Provenance m (NValue t f m)
-> AttrSet SourcePos -> AttrSet (NValue t f m) -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m)
-> AttrSet SourcePos -> AttrSet (NValue t f m) -> NValue t f m
nvSetP Provenance m (NValue t f m)
prov AttrSet SourcePos
lp AttrSet (NValue t f m)
ls
(NVConstant NAtom
NNull, NVSet AttrSet (NValue t f m)
rs AttrSet SourcePos
rp) -> NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NValue t f m -> m (NValue t f m))
-> NValue t f m -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Provenance m (NValue t f m)
-> AttrSet SourcePos -> AttrSet (NValue t f m) -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m)
-> AttrSet SourcePos -> AttrSet (NValue t f m) -> NValue t f m
nvSetP Provenance m (NValue t f m)
prov AttrSet SourcePos
rp AttrSet (NValue t f m)
rs
(NValue t f m, NValue t f m)
_ -> m (NValue t f m)
unsupportedTypes
NBinaryOp
NPlus ->
case (NValue t f m
lval, NValue t f m
rval) of
(NVConstant NAtom
_, NVConstant NAtom
_) -> (forall a. Num a => a -> a -> a) -> m (NValue t f m)
numBinOp forall a. Num a => a -> a -> a
(+)
(NVStr NixString
ls, NVStr NixString
rs) -> NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NValue t f m -> m (NValue t f m))
-> NValue t f m -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Provenance m (NValue t f m) -> NixString -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NixString -> NValue t f m
nvStrP Provenance m (NValue t f m)
prov (NixString
ls NixString -> NixString -> NixString
forall a. Semigroup a => a -> a -> a
<> NixString
rs)
(NVStr NixString
ls, rs :: NValue t f m
rs@NVPath{}) ->
(\NixString
rs2 -> Provenance m (NValue t f m) -> NixString -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NixString -> NValue t f m
nvStrP Provenance m (NValue t f m)
prov (NixString
ls NixString -> NixString -> NixString
forall a. Semigroup a => a -> a -> a
<> NixString
rs2)) (NixString -> NValue t f m) -> m NixString -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
(NValue t f m -> NValue t f m -> m (NValue t f m))
-> CopyToStoreMode -> CoercionLevel -> NValue t f m -> m NixString
forall e (m :: * -> *) t (f :: * -> *).
(Framed e m, MonadStore m, MonadThrow m,
MonadDataErrorContext t f m, MonadValue (NValue t f m) m) =>
(NValue t f m -> NValue t f m -> m (NValue t f m))
-> CopyToStoreMode -> CoercionLevel -> NValue t f m -> m NixString
coerceToString NValue t f m -> NValue t f m -> m (NValue t f m)
forall e t (f :: * -> *) (m :: * -> *).
MonadNix e t f m =>
NValue t f m -> NValue t f m -> m (NValue t f m)
callFunc CopyToStoreMode
CopyToStore CoercionLevel
CoerceStringy NValue t f m
rs
(NVPath FilePath
ls, NVStr NixString
rs) ->
m (NValue t f m)
-> (Text -> m (NValue t f m)) -> Maybe Text -> m (NValue t f m)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe
(ErrorCall -> m (NValue t f m)
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError (ErrorCall -> m (NValue t f m)) -> ErrorCall -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall FilePath
"A string that refers to a store path cannot be appended to a path.")
(\ Text
rs2 ->
Provenance m (NValue t f m) -> FilePath -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> FilePath -> NValue t f m
nvPathP Provenance m (NValue t f m)
prov (FilePath -> NValue t f m) -> m FilePath -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
FilePath -> m FilePath
forall t (f :: * -> *) (m :: * -> *).
MonadEffects t f m =>
FilePath -> m FilePath
makeAbsolutePath @t @f (FilePath
ls FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> Text -> FilePath
forall a. ToString a => a -> FilePath
toString Text
rs2)
)
(NixString -> Maybe Text
getStringNoContext NixString
rs)
(NVPath FilePath
ls, NVPath FilePath
rs) -> Provenance m (NValue t f m) -> FilePath -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> FilePath -> NValue t f m
nvPathP Provenance m (NValue t f m)
prov (FilePath -> NValue t f m) -> m FilePath -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FilePath -> m FilePath
forall t (f :: * -> *) (m :: * -> *).
MonadEffects t f m =>
FilePath -> m FilePath
makeAbsolutePath @t @f (FilePath
ls FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> FilePath
rs)
(ls :: NValue t f m
ls@NVSet{}, NVStr NixString
rs) ->
(\NixString
ls2 -> Provenance m (NValue t f m) -> NixString -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NixString -> NValue t f m
nvStrP Provenance m (NValue t f m)
prov (NixString
ls2 NixString -> NixString -> NixString
forall a. Semigroup a => a -> a -> a
<> NixString
rs)) (NixString -> NValue t f m) -> m NixString -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
(NValue t f m -> NValue t f m -> m (NValue t f m))
-> CopyToStoreMode -> CoercionLevel -> NValue t f m -> m NixString
forall e (m :: * -> *) t (f :: * -> *).
(Framed e m, MonadStore m, MonadThrow m,
MonadDataErrorContext t f m, MonadValue (NValue t f m) m) =>
(NValue t f m -> NValue t f m -> m (NValue t f m))
-> CopyToStoreMode -> CoercionLevel -> NValue t f m -> m NixString
coerceToString NValue t f m -> NValue t f m -> m (NValue t f m)
forall e t (f :: * -> *) (m :: * -> *).
MonadNix e t f m =>
NValue t f m -> NValue t f m -> m (NValue t f m)
callFunc CopyToStoreMode
DontCopyToStore CoercionLevel
CoerceStringy NValue t f m
ls
(NVStr NixString
ls, rs :: NValue t f m
rs@NVSet{}) ->
(\NixString
rs2 -> Provenance m (NValue t f m) -> NixString -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NixString -> NValue t f m
nvStrP Provenance m (NValue t f m)
prov (NixString
ls NixString -> NixString -> NixString
forall a. Semigroup a => a -> a -> a
<> NixString
rs2)) (NixString -> NValue t f m) -> m NixString -> m (NValue t f m)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
(NValue t f m -> NValue t f m -> m (NValue t f m))
-> CopyToStoreMode -> CoercionLevel -> NValue t f m -> m NixString
forall e (m :: * -> *) t (f :: * -> *).
(Framed e m, MonadStore m, MonadThrow m,
MonadDataErrorContext t f m, MonadValue (NValue t f m) m) =>
(NValue t f m -> NValue t f m -> m (NValue t f m))
-> CopyToStoreMode -> CoercionLevel -> NValue t f m -> m NixString
coerceToString NValue t f m -> NValue t f m -> m (NValue t f m)
forall e t (f :: * -> *) (m :: * -> *).
MonadNix e t f m =>
NValue t f m -> NValue t f m -> m (NValue t f m)
callFunc CopyToStoreMode
DontCopyToStore CoercionLevel
CoerceStringy NValue t f m
rs
(NValue t f m, NValue t f m)
_ -> m (NValue t f m)
unsupportedTypes
NBinaryOp
NEq -> m (NValue t f m)
alreadyHandled
NBinaryOp
NNEq -> m (NValue t f m)
alreadyHandled
NBinaryOp
NAnd -> m (NValue t f m)
alreadyHandled
NBinaryOp
NOr -> m (NValue t f m)
alreadyHandled
NBinaryOp
NImpl -> m (NValue t f m)
alreadyHandled
NBinaryOp
NApp -> ErrorCall -> m (NValue t f m)
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError (ErrorCall -> m (NValue t f m)) -> ErrorCall -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall FilePath
"NApp should be handled by evalApp"
where
prov :: Provenance m (NValue t f m)
prov :: Provenance m (NValue t f m)
prov = Scopes m (NValue t f m)
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall (m :: * -> *) v.
Scopes m v -> NExprLocF (Maybe v) -> Provenance m v
Provenance Scopes m (NValue t f m)
scope (NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m))
-> NExprLocF (Maybe (NValue t f m)) -> Provenance m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ SrcSpan
-> NBinaryOp
-> Maybe (NValue t f m)
-> Maybe (NValue t f m)
-> NExprLocF (Maybe (NValue t f m))
forall r. SrcSpan -> NBinaryOp -> r -> r -> NExprLocF r
NBinary_ SrcSpan
span NBinaryOp
op (NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure NValue t f m
lval) (NValue t f m -> Maybe (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure NValue t f m
rval)
toBool :: Bool -> m (NValue t f m)
toBool = NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NValue t f m -> m (NValue t f m))
-> (Bool -> NValue t f m) -> Bool -> m (NValue t f m)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Provenance m (NValue t f m) -> NAtom -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NAtom -> NValue t f m
nvConstantP Provenance m (NValue t f m)
prov (NAtom -> NValue t f m) -> (Bool -> NAtom) -> Bool -> NValue t f m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> NAtom
NBool
compare :: (forall a. Ord a => a -> a -> Bool) -> m (NValue t f m)
compare :: (forall a. Ord a => a -> a -> Bool) -> m (NValue t f m)
compare forall a. Ord a => a -> a -> Bool
op = case (NValue t f m
lval, NValue t f m
rval) of
(NVConstant NAtom
l, NVConstant NAtom
r) -> Bool -> m (NValue t f m)
toBool (Bool -> m (NValue t f m)) -> Bool -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ NAtom
l NAtom -> NAtom -> Bool
forall a. Ord a => a -> a -> Bool
`op` NAtom
r
(NVStr NixString
l, NVStr NixString
r) -> Bool -> m (NValue t f m)
toBool (Bool -> m (NValue t f m)) -> Bool -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ NixString
l NixString -> NixString -> Bool
forall a. Ord a => a -> a -> Bool
`op` NixString
r
(NValue t f m, NValue t f m)
_ -> m (NValue t f m)
unsupportedTypes
toInt :: Integer -> m (NValue t f m)
toInt = NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NValue t f m -> m (NValue t f m))
-> (Integer -> NValue t f m) -> Integer -> m (NValue t f m)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Provenance m (NValue t f m) -> NAtom -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NAtom -> NValue t f m
nvConstantP Provenance m (NValue t f m)
prov (NAtom -> NValue t f m)
-> (Integer -> NAtom) -> Integer -> NValue t f m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> NAtom
NInt
toFloat :: Float -> m (NValue t f m)
toFloat = NValue t f m -> m (NValue t f m)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NValue t f m -> m (NValue t f m))
-> (Float -> NValue t f m) -> Float -> m (NValue t f m)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Provenance m (NValue t f m) -> NAtom -> NValue t f m
forall t (f :: * -> *) (m :: * -> *).
MonadCited t f m =>
Provenance m (NValue t f m) -> NAtom -> NValue t f m
nvConstantP Provenance m (NValue t f m)
prov (NAtom -> NValue t f m)
-> (Float -> NAtom) -> Float -> NValue t f m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> NAtom
NFloat
numBinOp :: (forall a. Num a => a -> a -> a) -> m (NValue t f m)
numBinOp :: (forall a. Num a => a -> a -> a) -> m (NValue t f m)
numBinOp forall a. Num a => a -> a -> a
op = (Integer -> Integer -> Integer)
-> (Float -> Float -> Float) -> m (NValue t f m)
numBinOp' Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
op Float -> Float -> Float
forall a. Num a => a -> a -> a
op
numBinOp'
:: (Integer -> Integer -> Integer)
-> (Float -> Float -> Float)
-> m (NValue t f m)
numBinOp' :: (Integer -> Integer -> Integer)
-> (Float -> Float -> Float) -> m (NValue t f m)
numBinOp' Integer -> Integer -> Integer
intOp Float -> Float -> Float
floatOp = case (NValue t f m
lval, NValue t f m
rval) of
(NVConstant NAtom
l, NVConstant NAtom
r) -> case (NAtom
l, NAtom
r) of
(NInt Integer
li, NInt Integer
ri) -> Integer -> m (NValue t f m)
toInt (Integer -> m (NValue t f m)) -> Integer -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Integer
li Integer -> Integer -> Integer
`intOp` Integer
ri
(NInt Integer
li, NFloat Float
rf) -> Float -> m (NValue t f m)
toFloat (Float -> m (NValue t f m)) -> Float -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Integer -> Float
forall a. Num a => Integer -> a
fromInteger Integer
li Float -> Float -> Float
`floatOp` Float
rf
(NFloat Float
lf, NInt Integer
ri) -> Float -> m (NValue t f m)
toFloat (Float -> m (NValue t f m)) -> Float -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Float
lf Float -> Float -> Float
`floatOp` Integer -> Float
forall a. Num a => Integer -> a
fromInteger Integer
ri
(NFloat Float
lf, NFloat Float
rf) -> Float -> m (NValue t f m)
toFloat (Float -> m (NValue t f m)) -> Float -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ Float
lf Float -> Float -> Float
`floatOp` Float
rf
(NAtom, NAtom)
_ -> m (NValue t f m)
unsupportedTypes
(NValue t f m, NValue t f m)
_ -> m (NValue t f m)
unsupportedTypes
unsupportedTypes :: m (NValue t f m)
unsupportedTypes = ErrorCall -> m (NValue t f m)
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError (ErrorCall -> m (NValue t f m)) -> ErrorCall -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall (FilePath -> ErrorCall) -> FilePath -> ErrorCall
forall a b. (a -> b) -> a -> b
$ FilePath
"Unsupported argument types for binary operator " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> NBinaryOp -> FilePath
forall b a. (Show a, IsString b) => a -> b
show NBinaryOp
op FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> FilePath
": " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> NValue t f m -> FilePath
forall b a. (Show a, IsString b) => a -> b
show NValue t f m
lval FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> FilePath
", " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> NValue t f m -> FilePath
forall b a. (Show a, IsString b) => a -> b
show NValue t f m
rval
alreadyHandled :: m (NValue t f m)
alreadyHandled = ErrorCall -> m (NValue t f m)
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError (ErrorCall -> m (NValue t f m)) -> ErrorCall -> m (NValue t f m)
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall (FilePath -> ErrorCall) -> FilePath -> ErrorCall
forall a b. (a -> b) -> a -> b
$ FilePath
"This cannot happen: operator " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> NBinaryOp -> FilePath
forall b a. (Show a, IsString b) => a -> b
show NBinaryOp
op FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> FilePath
" should have been handled in execBinaryOp."
fromStringNoContext
:: Framed e m
=> NixString
-> m Text
fromStringNoContext :: NixString -> m Text
fromStringNoContext NixString
ns =
m Text -> (Text -> m Text) -> Maybe Text -> m Text
forall b a. b -> (a -> b) -> Maybe a -> b
maybe
(ErrorCall -> m Text
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError (ErrorCall -> m Text) -> ErrorCall -> m Text
forall a b. (a -> b) -> a -> b
$ FilePath -> ErrorCall
ErrorCall (FilePath -> ErrorCall) -> FilePath -> ErrorCall
forall a b. (a -> b) -> a -> b
$ FilePath
"expected string with no context, but got " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> NixString -> FilePath
forall b a. (Show a, IsString b) => a -> b
show NixString
ns)
Text -> m Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure
(NixString -> Maybe Text
getStringNoContext NixString
ns)
addTracing
::( MonadNix e t f m
, Has e Options
, Alternative n
, MonadReader Int n
, MonadFail n
)
=> Alg NExprLocF (m a)
-> Alg NExprLocF (n (m a))
addTracing :: Alg NExprLocF (m a) -> Alg NExprLocF (n (m a))
addTracing Alg NExprLocF (m a)
k NExprLocF (n (m a))
v = do
Int
depth <- n Int
forall r (m :: * -> *). MonadReader r m => m r
ask
Bool -> n ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Bool -> n ()) -> Bool -> n ()
forall a b. (a -> b) -> a -> b
$ Int
depth Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
2000
(Int -> Int) -> n (m a) -> n (m a)
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
local Int -> Int
forall a. Enum a => a -> a
succ (n (m a) -> n (m a)) -> n (m a) -> n (m a)
forall a b. (a -> b) -> a -> b
$ do
v' :: Compose (Ann SrcSpan) NExprF (m a)
v'@(AnnFP SrcSpan
span NExprF (m a)
x) <- NExprLocF (n (m a)) -> n (Compose (Ann SrcSpan) NExprF (m a))
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence NExprLocF (n (m a))
v
m a -> n (m a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (m a -> n (m a)) -> m a -> n (m a)
forall a b. (a -> b) -> a -> b
$ do
Options
opts :: Options <- (e -> Options) -> m Options
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks ((e -> Options) -> m Options) -> (e -> Options) -> m Options
forall a b. (a -> b) -> a -> b
$ FoldLike Options e e Options Options -> e -> Options
forall a s t b. FoldLike a s t a b -> s -> a
view FoldLike Options e e Options Options
forall a b. Has a b => Lens' a b
hasLens
let
rendered :: Doc Any
rendered =
if Options -> Verbosity
verbose Options
opts Verbosity -> Verbosity -> Bool
forall a. Ord a => a -> a -> Bool
>= Verbosity
Chatty
then
FilePath -> Doc Any
forall a ann. Pretty a => a -> Doc ann
pretty (FilePath -> Doc Any) -> FilePath -> Doc Any
forall a b. (a -> b) -> a -> b
$
NExprF () -> FilePath
forall a. Show a => a -> FilePath
PS.ppShow (NExprF () -> FilePath) -> NExprF () -> FilePath
forall a b. (a -> b) -> a -> b
$ NExprF (m a) -> NExprF ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void NExprF (m a)
x
else NExpr -> Doc Any
forall ann. NExpr -> Doc ann
prettyNix (NExpr -> Doc Any) -> NExpr -> Doc Any
forall a b. (a -> b) -> a -> b
$ NExprF NExpr -> NExpr
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NExprF NExpr -> NExpr) -> NExprF NExpr -> NExpr
forall a b. (a -> b) -> a -> b
$ NExprF NExpr -> NExpr
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (Text -> NExprF NExpr
forall r. Text -> NExprF r
NSym Text
"?") NExpr -> NExprF (m a) -> NExprF NExpr
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ NExprF (m a)
x
msg :: Doc Any -> Doc Any
msg Doc Any
x = FilePath -> Doc Any
forall a ann. Pretty a => a -> Doc ann
pretty (FilePath
"eval: " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> Int -> Char -> FilePath
forall a. Int -> a -> [a]
replicate Int
depth Char
' ') Doc Any -> Doc Any -> Doc Any
forall a. Semigroup a => a -> a -> a
<> Doc Any
x
Doc Any
loc <- SrcSpan -> Doc Any -> m (Doc Any)
forall (m :: * -> *) a.
MonadFile m =>
SrcSpan -> Doc a -> m (Doc a)
renderLocation SrcSpan
span (Doc Any -> m (Doc Any)) -> Doc Any -> m (Doc Any)
forall a b. (a -> b) -> a -> b
$ Doc Any -> Doc Any
msg Doc Any
rendered Doc Any -> Doc Any -> Doc Any
forall a. Semigroup a => a -> a -> a
<> Doc Any
" ...\n"
FilePath -> m ()
forall (m :: * -> *). MonadPutStr m => FilePath -> m ()
putStr (FilePath -> m ()) -> FilePath -> m ()
forall a b. (a -> b) -> a -> b
$ Doc Any -> FilePath
forall b a. (Show a, IsString b) => a -> b
show Doc Any
loc
a
res <- Alg NExprLocF (m a)
k Compose (Ann SrcSpan) NExprF (m a)
v'
Doc Any -> m ()
forall (m :: * -> *) a. (MonadPutStr m, Show a) => a -> m ()
print (Doc Any -> m ()) -> Doc Any -> m ()
forall a b. (a -> b) -> a -> b
$ Doc Any -> Doc Any
msg Doc Any
rendered Doc Any -> Doc Any -> Doc Any
forall a. Semigroup a => a -> a -> a
<> Doc Any
" ...done"
pure a
res
evalExprLoc :: forall e t f m . MonadNix e t f m => NExprLoc -> m (NValue t f m)
evalExprLoc :: NExprLoc -> m (NValue t f m)
evalExprLoc NExprLoc
expr =
do
Options
opts :: Options <- (e -> Options) -> m Options
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks ((e -> Options) -> m Options) -> (e -> Options) -> m Options
forall a b. (a -> b) -> a -> b
$ FoldLike Options e e Options Options -> e -> Options
forall a s t b. FoldLike a s t a b -> s -> a
view FoldLike Options e e Options Options
forall a b. Has a b => Lens' a b
hasLens
let
pTracedAdi :: NExprLoc -> m (NValue t f m)
pTracedAdi =
(NExprLoc -> m (NValue t f m))
-> (NExprLoc -> m (NValue t f m))
-> Bool
-> NExprLoc
-> m (NValue t f m)
forall a. a -> a -> Bool -> a
bool
NExprLoc -> m (NValue t f m)
forall e v (m :: * -> *).
(MonadNixEval v m, Framed e m, Has e SrcSpan, Typeable m,
Typeable v) =>
NExprLoc -> m v
Eval.framedEvalExprLoc
(m (m (NValue t f m)) -> m (NValue t f m)
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (m (m (NValue t f m)) -> m (NValue t f m))
-> (NExprLoc -> m (m (NValue t f m)))
-> NExprLoc
-> m (NValue t f m)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ReaderT Int m (m (NValue t f m)) -> Int -> m (m (NValue t f m))
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
`runReaderT` (Int
0 :: Int)) (ReaderT Int m (m (NValue t f m)) -> m (m (NValue t f m)))
-> (NExprLoc -> ReaderT Int m (m (NValue t f m)))
-> NExprLoc
-> m (m (NValue t f m))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
Transform NExprLocF (ReaderT Int m (m (NValue t f m)))
-> Alg NExprLocF (ReaderT Int m (m (NValue t f m)))
-> NExprLoc
-> ReaderT Int m (m (NValue t f m))
forall (f :: * -> *) a.
Functor f =>
Transform f a -> Alg f a -> Fix f -> a
adi
(((NExprLoc -> m (m (NValue t f m)))
-> NExprLoc -> m (m (NValue t f m)))
-> Transform NExprLocF (ReaderT Int m (m (NValue t f m)))
forall t (m :: * -> *) a t (m :: * -> *) a r.
((t -> m a) -> t -> m a)
-> (t -> ReaderT r m a) -> t -> ReaderT r m a
raise (NExprLoc -> m (m (NValue t f m)))
-> NExprLoc -> m (m (NValue t f m))
forall v (m :: * -> *) e a.
(Framed e m, Scoped v m, Has e SrcSpan, Typeable m, Typeable v) =>
TransformF NExprLoc (m a)
Eval.addMetaInfo)
(Alg NExprLocF (m (NValue t f m))
-> Alg NExprLocF (ReaderT Int m (m (NValue t f m)))
forall e t (f :: * -> *) (m :: * -> *) (n :: * -> *) a.
(MonadNix e t f m, Has e Options, Alternative n, MonadReader Int n,
MonadFail n) =>
Alg NExprLocF (m a) -> Alg NExprLocF (n (m a))
addTracing Alg NExprLocF (m (NValue t f m))
forall v (m :: * -> *) ann.
MonadNixEval v m =>
AnnF ann NExprF (m v) -> m v
Eval.evalContent)
)
(Options -> Bool
tracing Options
opts)
NExprLoc -> m (NValue t f m)
pTracedAdi NExprLoc
expr
where
raise :: ((t -> m a) -> t -> m a)
-> (t -> ReaderT r m a) -> t -> ReaderT r m a
raise (t -> m a) -> t -> m a
k t -> ReaderT r m a
f t
x = (r -> m a) -> ReaderT r m a
forall r (m :: * -> *) a. (r -> m a) -> ReaderT r m a
ReaderT ((r -> m a) -> ReaderT r m a) -> (r -> m a) -> ReaderT r m a
forall a b. (a -> b) -> a -> b
$ \r
e -> (t -> m a) -> t -> m a
k (\t
t -> ReaderT r m a -> r -> m a
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT (t -> ReaderT r m a
f t
t) r
e) t
x
exec :: (MonadNix e t f m, MonadInstantiate m) => [Text] -> m (NValue t f m)
exec :: [Text] -> m (NValue t f m)
exec [Text]
args = (ErrorCall -> m (NValue t f m))
-> (NExprLoc -> m (NValue t f m))
-> Either ErrorCall NExprLoc
-> m (NValue t f m)
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either ErrorCall -> m (NValue t f m)
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError NExprLoc -> m (NValue t f m)
forall e t (f :: * -> *) (m :: * -> *).
MonadNix e t f m =>
NExprLoc -> m (NValue t f m)
evalExprLoc (Either ErrorCall NExprLoc -> m (NValue t f m))
-> m (Either ErrorCall NExprLoc) -> m (NValue t f m)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< [Text] -> m (Either ErrorCall NExprLoc)
forall (m :: * -> *).
MonadExec m =>
[Text] -> m (Either ErrorCall NExprLoc)
exec' [Text]
args
nixInstantiateExpr
:: (MonadNix e t f m, MonadInstantiate m) => Text -> m (NValue t f m)
nixInstantiateExpr :: Text -> m (NValue t f m)
nixInstantiateExpr Text
s = (ErrorCall -> m (NValue t f m))
-> (NExprLoc -> m (NValue t f m))
-> Either ErrorCall NExprLoc
-> m (NValue t f m)
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either ErrorCall -> m (NValue t f m)
forall s e (m :: * -> *) a.
(Framed e m, Exception s, MonadThrow m) =>
s -> m a
throwError NExprLoc -> m (NValue t f m)
forall e t (f :: * -> *) (m :: * -> *).
MonadNix e t f m =>
NExprLoc -> m (NValue t f m)
evalExprLoc (Either ErrorCall NExprLoc -> m (NValue t f m))
-> m (Either ErrorCall NExprLoc) -> m (NValue t f m)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Text -> m (Either ErrorCall NExprLoc)
forall (m :: * -> *).
MonadInstantiate m =>
Text -> m (Either ErrorCall NExprLoc)
instantiateExpr Text
s