Revise the arguments to MonadEval.evalString

This commit is contained in:
John Wiegley 2018-04-30 19:57:23 -04:00
parent dcba116c72
commit 45beddb7d7
3 changed files with 14 additions and 11 deletions

View file

@ -52,7 +52,7 @@ class (Show v, Monad m) => MonadEval v m | v -> m where
evalCurPos :: m v
evalConstant :: NAtom -> m v
evalString :: Text -> DList Text -> m v
evalString :: NString (m v) -> m v
evalLiteralPath :: FilePath -> m v
evalEnvPath :: FilePath -> m v
evalUnary :: NUnaryOp -> v -> m v
@ -109,7 +109,7 @@ eval (NSym var) =
lookupVar var >>= maybe (freeVariable var) (force ?? evaledSym var)
eval (NConstant x) = evalConstant x
eval (NStr str) = uncurry evalString =<< assembleString str
eval (NStr str) = evalString str
eval (NLiteralPath p) = evalLiteralPath p
eval (NEnvPath p) = evalEnvPath p
eval (NUnary op arg) = evalUnary op =<< arg
@ -382,19 +382,19 @@ evalKeyNameDynamicNullable
evalKeyNameDynamicNullable = \case
StaticKey k p -> pure (Just k, p)
DynamicKey k ->
runAntiquoted "\n" (fmap Just . assembleString) (>>= fromValueMay) k
runAntiquoted "\n" assembleString (>>= fromValueMay) k
<&> \case Just (t, _) -> (Just t, Nothing)
_ -> (Nothing, Nothing)
assembleString :: forall v m. (MonadEval v m, FromValue (Text, DList Text) m v)
=> NString (m v) -> m (Text, DList Text)
=> NString (m v) -> m (Maybe (Text, DList Text))
assembleString = \case
Indented _ parts -> fromParts parts
DoubleQuoted parts -> fromParts parts
where
go = runAntiquoted "\n" (pure . (, mempty)) (>>= fromValue)
go = runAntiquoted "\n" (pure . Just . (, mempty)) (>>= fromValueMay)
fromParts parts = mconcat <$> mapM go parts
fromParts parts = fmap mconcat . sequence <$> mapM go parts
buildArgument :: forall e v t m. MonadNixEval e v t m
=> Params (m v) -> m v -> m (AttrSet t)

View file

@ -158,10 +158,13 @@ instance MonadNix e m => MonadEval (NValue m) m where
span <- currentPos
pure $ nvConstantP (Provenance scope (NConstant_ span c)) c
evalString s d = do
scope <- currentScopes
span <- currentPos
pure $ nvStrP (Provenance scope (NStr_ span (DoubleQuoted [Plain s]))) s d
evalString = assembleString >=> \case
Just (s, c) -> do
scope <- currentScopes
span <- currentPos
pure $ nvStrP (Provenance scope
(NStr_ span (DoubleQuoted [Plain s]))) s c
Nothing -> nverr ("Failed to assemble string" :: String)
evalLiteralPath p = do
scope <- currentScopes

View file

@ -277,7 +277,7 @@ instance MonadLint e m => MonadEval (Symbolic m) m where
NNull -> TNull
NUri _ -> TUri
evalString = const $ const $ mkSymbolic [TStr]
evalString = const $ mkSymbolic [TStr]
evalLiteralPath = const $ mkSymbolic [TPath]
evalEnvPath = const $ mkSymbolic [TPath]