Rename the internal version of ToNix/FromNix to ToValue/FromValue

This commit is contained in:
John Wiegley 2018-04-15 19:05:44 -07:00
parent ef82d5e9f2
commit fb6191c949
5 changed files with 217 additions and 217 deletions

View file

@ -98,7 +98,7 @@ valueThunk = value @_ @_ @m
builtinsList :: forall e m. MonadBuiltins e m => m [ Builtin m ]
builtinsList = sequence [
do version <- toNix ("2.0" :: Text)
do version <- toValue ("2.0" :: Text)
pure $ Builtin Normal ("nixVersion", version)
, add0 TopLevel "__nixPath" nixPath
@ -278,7 +278,7 @@ unsafeGetAttrPos x y = force x $ \x' -> force y $ \y' -> case (x', y') of
Nothing ->
throwError $ "unsafeGetAttrPos: field '" ++ Text.unpack key
++ "' does not exist in attr set: " ++ show apos
Just delta -> toNix delta
Just delta -> toValue delta
(x, y) -> throwError $ "Invalid types for builtin.unsafeGetAttrPos: "
++ show (x, y)
@ -414,12 +414,12 @@ splitDrvName s =
in (Text.intercalate sep namePieces, Text.intercalate sep versionPieces)
parseDrvName :: forall e m. MonadBuiltins e m => NThunk m -> m (NValue m)
parseDrvName = flip force $ fromNix >=> \(s :: Text) -> do
parseDrvName = flip force $ fromValue >=> \(s :: Text) -> do
let (name :: Text, version :: Text) = splitDrvName s
-- jww (2018-04-15): There should be an easier way to write this.
(toNix =<<) $ sequence $ M.fromList
[ ("name" :: Text, thunk (toNix name))
, ("version", thunk (toNix version)) ]
(toValue =<<) $ sequence $ M.fromList
[ ("name" :: Text, thunk (toValue name))
, ("version", thunk (toValue version)) ]
match_ :: forall e m. MonadBuiltins e m => NThunk m -> NThunk m -> m (NValue m)
match_ pat str = force pat $ \pat' -> force str $ \str' ->
@ -431,7 +431,7 @@ match_ pat str = force pat $ \pat' -> force str $ \str' ->
case matchOnceText re (encodeUtf8 s) of
Just ("", sarr, "") -> do
let s = map fst (elems sarr)
NVList <$> traverse (toNix . decodeUtf8)
NVList <$> traverse (toValue . decodeUtf8)
(if length s > 1 then tail s else s)
_ -> pure $ NVConstant NNull
(p, s) ->
@ -475,7 +475,7 @@ substring start len str = Prim $
attrNames :: forall e m. MonadBuiltins e m => NThunk m -> m (NValue m)
attrNames = flip force $ \case
NVSet m _ -> toNix =<< traverse (thunk . toNix) (sort (M.keys m))
NVSet m _ -> toValue =<< traverse (thunk . toValue) (sort (M.keys m))
v -> throwError $ "builtins.attrNames: Expected attribute set, got "
++ show v
@ -508,9 +508,9 @@ catAttrs attrName lt = force lt $ \case
++ show v
concatStringsSep :: MonadBuiltins e m => NThunk m -> NThunk m -> m (NValue m)
concatStringsSep s1 s2 = force s1 $ fromNix >=> \(s1' :: Text) ->
force s2 $ fromNix >=> traverse (`force` fromNix) >=> \(s2' :: [Text]) ->
toNix $ Text.intercalate s1' s2'
concatStringsSep s1 s2 = force s1 $ fromValue >=> \(s1' :: Text) ->
force s2 $ fromValue >=> traverse (`force` fromValue) >=> \(s2' :: [Text]) ->
toValue $ Text.intercalate s1' s2'
baseNameOf :: MonadBuiltins e m => NThunk m -> m (NValue m)
baseNameOf = flip force $ \case
@ -548,7 +548,7 @@ deepSeq a b = do
elem_ :: MonadBuiltins e m => NThunk m -> NThunk m -> m (NValue m)
elem_ x xs = force xs $ \case
NVList l -> toNix =<< anyM (thunkEq x) l
NVList l -> toValue =<< anyM (thunkEq x) l
v -> throwError $ "builtins.elem: Expected a list, got " ++ show v
elemAt_ :: MonadBuiltins e m => NThunk m -> NThunk m -> m (NValue m)
@ -562,16 +562,16 @@ elemAt_ xs n = force n $ extractInt >=> \n' -> force xs $ \case
genList :: MonadBuiltins e m => NThunk m -> NThunk m -> m (NValue m)
genList generator length = force length $ \case
NVConstant (NInt n) | n >= 0 -> fmap NVList $ forM [0 .. n - 1] $ \i ->
thunk $ force generator (`callFunc` toNix i)
thunk $ force generator (`callFunc` toValue i)
v -> throwError $ "builtins.genList: Expected a non-negative number, got "
++ show v
--TODO: Preserve string context
replaceStrings :: MonadBuiltins e m => NThunk m -> NThunk m -> NThunk m -> m (NValue m)
replaceStrings tfrom tto ts =
force tfrom $ fromNix >=> traverse (`force` fromNix) >=> \(from :: [Text]) ->
force tto $ fromNix >=> traverse (`force` fromNix) >=> \(to :: [Text]) ->
force ts $ fromNix >=> \(s :: Text) -> do
force tfrom $ fromValue >=> traverse (`force` fromValue) >=> \(from :: [Text]) ->
force tto $ fromValue >=> traverse (`force` fromValue) >=> \(to :: [Text]) ->
force ts $ fromValue >=> \(s :: Text) -> do
when (length from /= length to) $
throwError $ "'from' and 'to' arguments to 'replaceStrings'"
++ " have different lengths"
@ -594,11 +594,11 @@ replaceStrings tfrom tto ts =
, Builder.singleton h
]
_ -> go rest $ result <> Builder.fromText replacement
toNix $ go s mempty
toValue $ go s mempty
removeAttrs :: MonadBuiltins e m => NThunk m -> NThunk m -> m (NValue m)
removeAttrs set list = force list $
fromNix >=> traverse (`force` fromNix) >=> \(toRemove :: [Text]) ->
fromValue >=> traverse (`force` fromValue) >=> \(toRemove :: [Text]) ->
force set $ \case
NVSet m p -> return $ NVSet (go m toRemove) (go p toRemove)
v -> throwError $ "removeAttrs: expected set, got " ++ show v
@ -642,43 +642,43 @@ pathExists_ = flip force $ \case
isAttrs :: MonadBuiltins e m => NThunk m -> m (NValue m)
isAttrs = flip force $ \case
NVSet _ _ -> toNix True
_ -> toNix False
NVSet _ _ -> toValue True
_ -> toValue False
isList :: MonadBuiltins e m => NThunk m -> m (NValue m)
isList = flip force $ \case
NVList _ -> toNix True
_ -> toNix False
NVList _ -> toValue True
_ -> toValue False
isFunction :: MonadBuiltins e m => NThunk m -> m (NValue m)
isFunction = flip force $ \case
NVClosure {} -> toNix True
_ -> toNix False
NVClosure {} -> toValue True
_ -> toValue False
isString :: MonadBuiltins e m => NThunk m -> m (NValue m)
isString = flip force $ \case
NVStr _ _ -> toNix True
_ -> toNix False
NVStr _ _ -> toValue True
_ -> toValue False
isInt :: MonadBuiltins e m => NThunk m -> m (NValue m)
isInt = flip force $ \case
NVConstant (NInt _) -> toNix True
_ -> toNix False
NVConstant (NInt _) -> toValue True
_ -> toValue False
isFloat :: MonadBuiltins e m => NThunk m -> m (NValue m)
isFloat = flip force $ \case
NVConstant (NFloat _) -> toNix True
_ -> toNix False
NVConstant (NFloat _) -> toValue True
_ -> toValue False
isBool :: MonadBuiltins e m => NThunk m -> m (NValue m)
isBool = flip force $ \case
NVConstant (NBool _) -> toNix True
_ -> toNix False
NVConstant (NBool _) -> toValue True
_ -> toValue False
isNull :: MonadBuiltins e m => NThunk m -> m (NValue m)
isNull = flip force $ \case
NVConstant NNull -> toNix True
_ -> toNix False
NVConstant NNull -> toValue True
_ -> toValue False
throw_ :: MonadBuiltins e m => NThunk m -> m (NValue m)
throw_ = flip force $ \case
@ -713,11 +713,11 @@ sort_ comparator list = force list $ \case
where
cmp a b = do
isLessThan <- call2 comparator a b
fromNix isLessThan >>= \case
fromValue isLessThan >>= \case
True -> pure LT
False -> do
isGreaterThan <- call2 comparator b a
fromNix isGreaterThan >>= \case
fromValue isGreaterThan >>= \case
True -> pure GT
False -> pure EQ
v -> throwError $ "builtins.sort: expected list, got " ++ show v
@ -783,7 +783,7 @@ absolutePathFromValue = \case
--TODO: Move all liftIO things into MonadNixEnv or similar
readFile_ :: MonadBuiltins e m => NThunk m -> m (NValue m)
readFile_ path = force path $
toNix <=< Nix.Stack.readFile <=< absolutePathFromValue
toValue <=< Nix.Stack.readFile <=< absolutePathFromValue
data FileType
= FileType_Regular
@ -792,8 +792,8 @@ data FileType
| FileType_Unknown
deriving (Show, Read, Eq, Ord)
instance Applicative m => ToNix FileType m (NValue m) where
toNix = toNix . \case
instance Applicative m => ToValue FileType m (NValue m) where
toValue = toValue . \case
FileType_Regular -> "regular" :: Text
FileType_Directory -> "directory"
FileType_Symlink -> "symlink"
@ -811,20 +811,20 @@ readDir_ pathThunk = do
| isSymbolicLink s -> FileType_Symlink
| otherwise -> FileType_Unknown
pure (Text.pack item, t)
toNix =<< traverse (thunk . toNix) (M.fromList itemsWithTypes)
toValue =<< traverse (thunk . toValue) (M.fromList itemsWithTypes)
fromJSON :: MonadBuiltins e m => NThunk m -> m (NValue m)
fromJSON t = force t $ fromNix >=> \encoded ->
fromJSON t = force t $ fromValue >=> \encoded ->
case A.eitherDecodeStrict' @A.Value $ encodeUtf8 encoded of
Left jsonError -> throwError $ "builtins.fromJSON: " ++ jsonError
Right v -> toNix v
Right v -> toValue v
toXML_ :: MonadBuiltins e m => NThunk m -> m (NValue m)
toXML_ = flip force $ normalForm >=> \x ->
pure $ NVStr (Text.pack (toXML x)) mempty
typeOf :: MonadBuiltins e m => NThunk m -> m (NValue m)
typeOf t = force t $ \v -> toNix @Text $ case v of
typeOf t = force t $ \v -> toValue @Text $ case v of
NVConstant a -> case a of
NInt _ -> "int"
NFloat _ -> "float"
@ -921,14 +921,14 @@ newtype Prim m a = Prim { runPrim :: m a }
class ToBuiltin m a | a -> m where
toBuiltin :: String -> a -> m (NValue m)
instance (MonadBuiltins e m, ToNix a m (NValue m)) => ToBuiltin m (Prim m a) where
toBuiltin _ p = toNix =<< runPrim p
instance (MonadBuiltins e m, ToValue a m (NValue m)) => ToBuiltin m (Prim m a) where
toBuiltin _ p = toValue =<< runPrim p
instance (MonadBuiltins e m, FromNix a m (NValue m), ToBuiltin m b)
instance (MonadBuiltins e m, FromValue a m (NValue m), ToBuiltin m b)
=> ToBuiltin m (a -> b) where
toBuiltin name f =
return $ NVBuiltin name $
force ?? (fromNix >=> toBuiltin name . f)
force ?? (fromValue >=> toBuiltin name . f)
toEncodingSorted :: A.Value -> A.Encoding
toEncodingSorted = \case

View file

@ -35,115 +35,115 @@ import Nix.Stack
import Nix.Thunk
import Nix.Value
class FromNix a m v where
fromNix :: v -> m a
class FromValue a m v where
fromValue :: v -> m a
fromNixMay :: v -> m (Maybe a)
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Bool m (NValueNF m) where
=> FromValue Bool m (NValueNF m) where
fromNixMay = \case
Fix (NVConstant (NBool b)) -> pure $ Just b
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a bool, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Bool m (NValue m) where
=> FromValue Bool m (NValue m) where
fromNixMay = \case
NVConstant (NBool b) -> pure $ Just b
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a bool, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Int m (NValueNF m) where
=> FromValue Int m (NValueNF m) where
fromNixMay = \case
Fix (NVConstant (NInt b)) -> pure $ Just (fromInteger b)
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected an integer, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Int m (NValue m) where
=> FromValue Int m (NValue m) where
fromNixMay = \case
NVConstant (NInt b) -> pure $ Just (fromInteger b)
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected an integer, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Integer m (NValueNF m) where
=> FromValue Integer m (NValueNF m) where
fromNixMay = \case
Fix (NVConstant (NInt b)) -> pure $ Just b
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected an integer, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Integer m (NValue m) where
=> FromValue Integer m (NValue m) where
fromNixMay = \case
NVConstant (NInt b) -> pure $ Just b
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected an integer, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Float m (NValueNF m) where
=> FromValue Float m (NValueNF m) where
fromNixMay = \case
Fix (NVConstant (NFloat b)) -> pure $ Just b
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a float, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Float m (NValue m) where
=> FromValue Float m (NValue m) where
fromNixMay = \case
NVConstant (NFloat b) -> pure $ Just b
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a float, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Text m (NValueNF m) where
=> FromValue Text m (NValueNF m) where
fromNixMay = \case
Fix (NVStr t _) -> pure $ Just t
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a string, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Text m (NValue m) where
=> FromValue Text m (NValue m) where
fromNixMay = \case
NVStr t _ -> pure $ Just t
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a string, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix ByteString m (NValueNF m) where
=> FromValue ByteString m (NValueNF m) where
fromNixMay = \case
Fix (NVStr t _) -> pure $ Just (encodeUtf8 t)
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a string, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix ByteString m (NValue m) where
=> FromValue ByteString m (NValue m) where
fromNixMay = \case
NVStr t _ -> pure $ Just (encodeUtf8 t)
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a string, but saw: " ++ show v
@ -151,114 +151,114 @@ newtype Path = Path { getPath :: FilePath }
deriving Show
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Path m (NValueNF m) where
=> FromValue Path m (NValueNF m) where
fromNixMay = \case
Fix (NVPath p) -> pure $ Just (Path p)
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a path, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix Path m (NValue m) where
=> FromValue Path m (NValue m) where
fromNixMay = \case
NVPath p -> pure $ Just (Path p)
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a path, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m,
FromNix a m (NValueNF m), Show a)
=> FromNix [a] m (NValueNF m) where
FromValue a m (NValueNF m), Show a)
=> FromValue [a] m (NValueNF m) where
fromNixMay = \case
Fix (NVList l) -> sequence <$> traverse fromNixMay l
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected an attrset, but saw: " ++ show v
-- jww (2018-04-15): This instance does not work, because when the desired
-- conversion is FromNix [NThunk m] m (NValue m), we then use traverse with
-- FromNix (NThunk m) m (NValue m), and this use of 'traverse' causes the
-- conversion is FromValue [NThunk m] m (NValue m), we then use traverse with
-- FromValue (NThunk m) m (NValue m), and this use of 'traverse' causes the
-- monadic effects to be sequence'd too early.
-- instance (Framed e m, MonadVar m, MonadFile m) => (MonadThunk (NValue m) (NThunk m) m,
-- FromNix a m (NValue m), Show a) => FromNix [a] m (NValue m) where
-- FromValue a m (NValue m), Show a) => FromValue [a] m (NValue m) where
-- fromNixMay = \case
-- NVList l -> sequence <$> traverse (`force` fromNixMay) l
-- _ -> pure Nothing
-- fromNix = fromNixMay >=> \case
-- fromValue = fromNixMay >=> \case
-- Just b -> pure b
-- v -> throwError $ "Expected an attrset, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix [NThunk m] m (NValue m) where
=> FromValue [NThunk m] m (NValue m) where
fromNixMay = \case
NVList l -> pure $ Just l
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected an attrset, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix (HashMap Text (NValueNF m)) m (NValueNF m) where
=> FromValue (HashMap Text (NValueNF m)) m (NValueNF m) where
fromNixMay = \case
Fix (NVSet s _) -> pure $ Just s
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected an attrset, but saw: " ++ show v
-- instance (Framed e m, MonadVar m, MonadFile m) => (MonadThunk (NValue m) (NThunk m) m,
-- FromNix a m (NValue m), Show a)
-- => FromNix (HashMap Text a) m (NValue m) where
-- FromValue a m (NValue m), Show a)
-- => FromValue (HashMap Text a) m (NValue m) where
-- fromNixMay = \case
-- NVSet s _ -> sequence <$> traverse (`force` fromNixMay) s
-- _ -> pure Nothing
-- fromNix = fromNixMay >=> \case
-- fromValue = fromNixMay >=> \case
-- Just b -> pure b
-- v -> throwError $ "Expected an attrset, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix (HashMap Text (NThunk m)) m (NValue m) where
=> FromValue (HashMap Text (NThunk m)) m (NValue m) where
fromNixMay = \case
NVSet s _ -> pure $ Just s
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected an attrset, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix (HashMap Text (NValueNF m),
=> FromValue (HashMap Text (NValueNF m),
HashMap Text SourcePos) m (NValueNF m) where
fromNixMay = \case
Fix (NVSet s p) -> pure $ Just (s, p)
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected an attrset, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m)
=> FromNix (HashMap Text (NThunk m),
=> FromValue (HashMap Text (NThunk m),
HashMap Text SourcePos) m (NValue m) where
fromNixMay = \case
NVSet s p -> pure $ Just (s, p)
_ -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected an attrset, but saw: " ++ show v
instance (MonadThunk (NValue m) (NThunk m) m,
Framed e m, MonadVar m, MonadFile m)
=> FromNix (NThunk m) m (NValue m) where
=> FromValue (NThunk m) m (NValue m) where
fromNixMay = pure . Just . value @_ @_ @m
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Expected a thunk, but saw: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m, MonadEffects m)
=> FromNix A.Value m (NValueNF m) where
=> FromValue A.Value m (NValueNF m) where
fromNixMay = \case
Fix (NVConstant a) -> pure $ Just $ case a of
NInt n -> toJSON n
@ -273,117 +273,117 @@ instance (Framed e m, MonadVar m, MonadFile m, MonadEffects m)
Fix NVClosure {} -> pure Nothing
Fix (NVPath p) -> Just . toJSON . unStorePath <$> addPath p
Fix (NVBuiltin _ _) -> pure Nothing
fromNix = fromNixMay >=> \case
fromValue = fromNixMay >=> \case
Just b -> pure b
v -> throwError $ "Cannot convert value to JSON: " ++ show v
instance (Framed e m, MonadVar m, MonadFile m,
MonadThunk (NValue m) (NThunk m) m, MonadEffects m)
=> FromNix A.Value m (NValue m) where
=> FromValue A.Value m (NValue m) where
fromNixMay = normalForm >=> fromNixMay
fromNix = normalForm >=> fromNix
fromValue = normalForm >=> fromValue
class ToNix a m v where
toNix :: a -> m v
class ToValue a m v where
toValue :: a -> m v
instance Applicative m => ToNix Bool m (NValueNF m) where
toNix = pure . Fix . NVConstant . NBool
instance Applicative m => ToValue Bool m (NValueNF m) where
toValue = pure . Fix . NVConstant . NBool
instance Applicative m => ToNix Bool m (NValue m) where
toNix = pure . NVConstant . NBool
instance Applicative m => ToValue Bool m (NValue m) where
toValue = pure . NVConstant . NBool
instance Applicative m => ToNix Int m (NValueNF m) where
toNix = pure . Fix . NVConstant . NInt . toInteger
instance Applicative m => ToValue Int m (NValueNF m) where
toValue = pure . Fix . NVConstant . NInt . toInteger
instance Applicative m => ToNix Int m (NValue m) where
toNix = pure . NVConstant . NInt . toInteger
instance Applicative m => ToValue Int m (NValue m) where
toValue = pure . NVConstant . NInt . toInteger
instance Applicative m => ToNix Integer m (NValueNF m) where
toNix = pure . Fix . NVConstant . NInt
instance Applicative m => ToValue Integer m (NValueNF m) where
toValue = pure . Fix . NVConstant . NInt
instance Applicative m => ToNix Integer m (NValue m) where
toNix = pure . NVConstant . NInt
instance Applicative m => ToValue Integer m (NValue m) where
toValue = pure . NVConstant . NInt
instance Applicative m => ToNix Float m (NValueNF m) where
toNix = pure . Fix . NVConstant . NFloat
instance Applicative m => ToValue Float m (NValueNF m) where
toValue = pure . Fix . NVConstant . NFloat
instance Applicative m => ToNix Float m (NValue m) where
toNix = pure . NVConstant . NFloat
instance Applicative m => ToValue Float m (NValue m) where
toValue = pure . NVConstant . NFloat
instance Applicative m => ToNix Text m (NValueNF m) where
toNix = pure . Fix . flip NVStr mempty
instance Applicative m => ToValue Text m (NValueNF m) where
toValue = pure . Fix . flip NVStr mempty
instance Applicative m => ToNix Text m (NValue m) where
toNix = pure . flip NVStr mempty
instance Applicative m => ToValue Text m (NValue m) where
toValue = pure . flip NVStr mempty
instance Applicative m => ToNix ByteString m (NValueNF m) where
toNix = pure . Fix . flip NVStr mempty . decodeUtf8
instance Applicative m => ToValue ByteString m (NValueNF m) where
toValue = pure . Fix . flip NVStr mempty . decodeUtf8
instance Applicative m => ToNix ByteString m (NValue m) where
toNix = pure . flip NVStr mempty . decodeUtf8
instance Applicative m => ToValue ByteString m (NValue m) where
toValue = pure . flip NVStr mempty . decodeUtf8
instance Applicative m => ToNix Path m (NValueNF m) where
toNix = pure . Fix . NVPath . getPath
instance Applicative m => ToValue Path m (NValueNF m) where
toValue = pure . Fix . NVPath . getPath
instance Applicative m => ToNix Path m (NValue m) where
toNix = pure . NVPath . getPath
instance Applicative m => ToValue Path m (NValue m) where
toValue = pure . NVPath . getPath
instance MonadThunk (NValue m) (NThunk m) m
=> ToNix SourcePos m (NValue m) where
toNix (SourcePos f l c) = do
f' <- toNix @_ @_ @(NValue m) (Text.pack f)
l' <- toNix (unPos l)
c' <- toNix (unPos c)
=> ToValue SourcePos m (NValue m) where
toValue (SourcePos f l c) = do
f' <- toValue @_ @_ @(NValue m) (Text.pack f)
l' <- toValue (unPos l)
c' <- toValue (unPos c)
let pos = M.fromList
[ ("file" :: Text, value @_ @_ @m f')
, ("line", value @_ @_ @m l')
, ("column", value @_ @_ @m c') ]
pure $ NVSet pos mempty
instance (ToNix a m (NValueNF m), Applicative m)
=> ToNix [a] m (NValueNF m) where
toNix = fmap (Fix . NVList) . traverse toNix
instance (ToValue a m (NValueNF m), Applicative m)
=> ToValue [a] m (NValueNF m) where
toValue = fmap (Fix . NVList) . traverse toValue
-- instance Applicative m => (MonadThunk (NValue m) (NThunk m) m,
-- ToNix a m (NValue m)) => ToNix [a] m (NValue m) where
-- toNix = pure . NVList . fmap toNix
-- ToValue a m (NValue m)) => ToValue [a] m (NValue m) where
-- toValue = pure . NVList . fmap toValue
instance Applicative m => ToNix [NThunk m] m (NValue m) where
toNix = pure . NVList
instance Applicative m => ToValue [NThunk m] m (NValue m) where
toValue = pure . NVList
instance Applicative m
=> ToNix (HashMap Text (NValueNF m)) m (NValueNF m) where
toNix = pure . Fix . flip NVSet M.empty
=> ToValue (HashMap Text (NValueNF m)) m (NValueNF m) where
toValue = pure . Fix . flip NVSet M.empty
-- instance Applicative m => (MonadThunk (NValue m) (NThunk m) m,
-- ToNix a m (NValue m))
-- => ToNix (HashMap Text a) m (NValue m) where
-- toNix = pure . flip NVSet M.empty . fmap toNix
-- ToValue a m (NValue m))
-- => ToValue (HashMap Text a) m (NValue m) where
-- toValue = pure . flip NVSet M.empty . fmap toValue
instance Applicative m => ToNix (HashMap Text (NThunk m)) m (NValue m) where
toNix = pure . flip NVSet M.empty
instance Applicative m => ToValue (HashMap Text (NThunk m)) m (NValue m) where
toValue = pure . flip NVSet M.empty
instance Applicative m => ToNix (HashMap Text (NValueNF m),
instance Applicative m => ToValue (HashMap Text (NValueNF m),
HashMap Text SourcePos) m (NValueNF m) where
toNix (s, p) = pure $ Fix $ NVSet s p
toValue (s, p) = pure $ Fix $ NVSet s p
instance Applicative m => ToNix (HashMap Text (NThunk m),
instance Applicative m => ToValue (HashMap Text (NThunk m),
HashMap Text SourcePos) m (NValue m) where
toNix (s, p) = pure $ NVSet s p
toValue (s, p) = pure $ NVSet s p
instance (MonadThunk (NValue m) (NThunk m) m, ToNix a m (NValue m))
=> ToNix a m (NThunk m) where
toNix = fmap (value @(NValue m) @_ @m) . toNix
instance (MonadThunk (NValue m) (NThunk m) m, ToValue a m (NValue m))
=> ToValue a m (NThunk m) where
toValue = fmap (value @(NValue m) @_ @m) . toValue
instance Applicative m => ToNix Bool m (NExprF r) where
toNix = pure . NConstant . NBool
instance Applicative m => ToValue Bool m (NExprF r) where
toValue = pure . NConstant . NBool
instance MonadThunk (NValue m) (NThunk m) m
=> ToNix A.Value m (NValue m) where
toNix = \case
=> ToValue A.Value m (NValue m) where
toValue = \case
A.Object m -> flip NVSet M.empty
<$> traverse (thunk . toNix @_ @_ @(NValue m)) m
A.Array l -> NVList <$> traverse (thunk . toNix) (V.toList l)
<$> traverse (thunk . toValue @_ @_ @(NValue m)) m
A.Array l -> NVList <$> traverse (thunk . toValue) (V.toList l)
A.String s -> pure $ NVStr s mempty
A.Number n -> pure $ NVConstant $ case floatingOrInteger n of
Left r -> NFloat r

View file

@ -74,10 +74,10 @@ class (Show v, Monoid (MText v), Monad m) => MonadEval v m | v -> m where
type MonadNixEval e v t m =
(MonadEval v m, Scoped e t m, MonadThunk v t m, MonadFix m,
Framed e m, MonadFile m, MonadVar m,
ToNix Bool m v, ToNix [t] m v,
ToNix (AttrSet t) m v, FromNix (AttrSet t) m v,
ToNix (AttrSet t, AttrSet SourcePos) m v,
FromNix (AttrSet t, AttrSet SourcePos) m v)
ToValue Bool m v, ToValue [t] m v,
ToValue (AttrSet t) m v, FromValue (AttrSet t) m v,
ToValue (AttrSet t, AttrSet SourcePos) m v,
FromValue (AttrSet t, AttrSet SourcePos) m v)
-- | Evaluate an nix expression, with a given NThunkSet as environment
evalExpr :: MonadNixEval e v t m => NExpr -> m v
@ -117,27 +117,27 @@ eval (NSelect aset attr alt) = do
eval (NHasAttr aset attr) = do
traceM "NHasAttr"
toNix . either (const False) (const True)
toValue . either (const False) (const True)
=<< evalSelect aset attr
eval (NList l) = do
traceM "NList"
scope <- currentScopes
toNix =<< for l (thunk . withScopes @t scope)
toValue =<< for l (thunk . withScopes @t scope)
eval (NSet binds) = do
traceM "NSet..1"
(s, p) <- evalBinds True False binds
traceM $ "NSet..2: s = " ++ show (void s)
traceM $ "NSet..2: p = " ++ show (void p)
toNix (s, p)
toValue (s, p)
eval (NRecSet binds) = do
traceM "NRecSet..1"
(s, p) <- evalBinds True True binds
traceM $ "NRecSet..2: s = " ++ show (void s)
traceM $ "NRecSet..2: p = " ++ show (void p)
toNix (s, p)
toValue (s, p)
eval (NLet binds e) = do
traceM "Let..1"
@ -185,7 +185,7 @@ attrSetAlter (p:ps) m val = case M.lookup p m of
-- jww (2018-04-13): Need to record positions for attr paths as well
recurse s = attrSetAlter ps s val <&> \m' ->
M.insert p (toNix =<< fmap (value @_ @_ @m) <$> sequence m') m
M.insert p (toValue =<< fmap (value @_ @_ @m) <$> sequence m') m
evalBinds :: forall e v t m. MonadNixEval e v t m
=> Bool
@ -216,7 +216,7 @@ evalBinds allowDynamic recursive binds = do
h : t -> evalSetterKeyName allowDynamic h >>= \case
(Nothing, _) ->
pure ([], Nothing,
toNix (mempty :: AttrSet t))
toValue (mempty :: AttrSet t))
(Just k, pos) -> do
(restOfPath, _, v) <- go t
pure (k : restOfPath, pos, v)
@ -272,7 +272,7 @@ evalSelect aset attr =
extract x (k:ks) = fromNixMay x >>= \case
Just (s :: AttrSet t, p :: AttrSet SourcePos) -> case M.lookup k s of
Just v -> force v $ extract ?? ks
Nothing -> Left . (, k:ks) <$> toNix (s, p)
Nothing -> Left . (, k:ks) <$> toValue (s, p)
Nothing -> return $ Left (x, k:ks)
evalSelector :: MonadEval v m

View file

@ -84,7 +84,7 @@ instance MonadNix e m => MonadEval (NValue m) m where
Compose (Ann (SrcSpan delta _) _):_ <-
asks (mapMaybe (either (const Nothing) Just)
. view @_ @Frames hasLens)
toNix delta
toValue delta
evalConstant = pure . NVConstant
evalString = pure . uncurry NVStr
@ -198,82 +198,82 @@ execBinaryOp op larg rarg = do
-> NAtom -> NAtom -> m (NValue m)
numBinOp' intF floatF l r = case (l, r) of
(NInt li, NInt ri) ->
toNix $ li `intF` ri
toValue $ li `intF` ri
(NInt li, NFloat rf) ->
toNix $ fromInteger li `floatF` rf
toValue $ fromInteger li `floatF` rf
(NFloat lf, NInt ri) ->
toNix $ lf `floatF` fromInteger ri
toValue $ lf `floatF` fromInteger ri
(NFloat lf, NFloat rf) ->
toNix $ lf `floatF` rf
toValue $ lf `floatF` rf
_ -> nverr unsupportedTypes
nverr = evalError @(NValue m)
case (lval, rval) of
(NVConstant lc, NVConstant rc) -> case (op, lc, rc) of
(NEq, _, _) -> toNix =<< valueEq lval rval
(NNEq, _, _) -> toNix . not =<< valueEq lval rval
(NLt, l, r) -> toNix $ l < r
(NLte, l, r) -> toNix $ l <= r
(NGt, l, r) -> toNix $ l > r
(NGte, l, r) -> toNix $ l >= r
(NEq, _, _) -> toValue =<< valueEq lval rval
(NNEq, _, _) -> toValue . not =<< valueEq lval rval
(NLt, l, r) -> toValue $ l < r
(NLte, l, r) -> toValue $ l <= r
(NGt, l, r) -> toValue $ l > r
(NGte, l, r) -> toValue $ l >= r
(NAnd, _, _) -> nverr "should be impossible: && is handled above"
(NOr, _, _) -> nverr "should be impossible: || is handled above"
(NPlus, l, r) -> numBinOp (+) l r
(NMinus, l, r) -> numBinOp (-) l r
(NMult, l, r) -> numBinOp (*) l r
(NDiv, l, r) -> numBinOp' div (/) l r
(NImpl, NBool l, NBool r) -> toNix $ not l || r
(NImpl, NBool l, NBool r) -> toValue $ not l || r
_ -> nverr unsupportedTypes
(NVStr ls lc, NVStr rs rc) -> case op of
NPlus -> pure $ NVStr (ls `mappend` rs) (lc `mappend` rc)
NEq -> toNix =<< valueEq lval rval
NNEq -> toNix . not =<< valueEq lval rval
NLt -> toNix $ ls < rs
NLte -> toNix $ ls <= rs
NGt -> toNix $ ls > rs
NGte -> toNix $ ls >= rs
NEq -> toValue =<< valueEq lval rval
NNEq -> toValue . not =<< valueEq lval rval
NLt -> toValue $ ls < rs
NLte -> toValue $ ls <= rs
NGt -> toValue $ ls > rs
NGte -> toValue $ ls >= rs
_ -> nverr unsupportedTypes
(NVStr _ _, NVConstant NNull) -> case op of
NEq -> toNix =<< valueEq lval (NVStr "" mempty)
NNEq -> toNix . not =<< valueEq lval (NVStr "" mempty)
NEq -> toValue =<< valueEq lval (NVStr "" mempty)
NNEq -> toValue . not =<< valueEq lval (NVStr "" mempty)
_ -> nverr unsupportedTypes
(NVConstant NNull, NVStr _ _) -> case op of
NEq -> toNix =<< valueEq (NVStr "" mempty) rval
NNEq -> toNix . not =<< valueEq (NVStr "" mempty) rval
NEq -> toValue =<< valueEq (NVStr "" mempty) rval
NNEq -> toValue . not =<< valueEq (NVStr "" mempty) rval
_ -> nverr unsupportedTypes
(NVSet ls lp, NVSet rs rp) -> case op of
NUpdate -> pure $ NVSet (rs `M.union` ls) (rp `M.union` lp)
NEq -> toNix =<< valueEq lval rval
NNEq -> toNix . not =<< valueEq lval rval
NEq -> toValue =<< valueEq lval rval
NNEq -> toValue . not =<< valueEq lval rval
_ -> nverr unsupportedTypes
(NVList ls, NVList rs) -> case op of
NConcat -> pure $ NVList $ ls ++ rs
NEq -> toNix =<< valueEq lval rval
NNEq -> toNix . not =<< valueEq lval rval
NEq -> toValue =<< valueEq lval rval
NNEq -> toValue . not =<< valueEq lval rval
_ -> nverr unsupportedTypes
(NVList ls, NVConstant NNull) -> case op of
NConcat -> pure $ NVList ls
NEq -> toNix =<< valueEq lval (NVList [])
NNEq -> toNix . not =<< valueEq lval (NVList [])
NEq -> toValue =<< valueEq lval (NVList [])
NNEq -> toValue . not =<< valueEq lval (NVList [])
_ -> nverr unsupportedTypes
(NVConstant NNull, NVList rs) -> case op of
NConcat -> pure $ NVList rs
NEq -> toNix =<< valueEq (NVList []) rval
NNEq -> toNix . not =<< valueEq (NVList []) rval
NEq -> toValue =<< valueEq (NVList []) rval
NNEq -> toValue . not =<< valueEq (NVList []) rval
_ -> nverr unsupportedTypes
(NVPath p, NVStr s _) -> case op of
-- jww (2018-04-13): Do we need to make the path absolute here?
NEq -> toNix $ p == Text.unpack s
NNEq -> toNix $ p /= Text.unpack s
NEq -> toValue $ p == Text.unpack s
NNEq -> toValue $ p /= Text.unpack s
NPlus -> NVPath <$> makeAbsolutePath (p `mappend` Text.unpack s)
_ -> nverr unsupportedTypes
@ -440,7 +440,7 @@ findEnvPathM name = do
mres <- lookupVar @_ @(NThunk m) "__nixPath"
mpath <- case mres of
Nothing -> error "impossible"
Just x -> force x $ fromNix >=> \(l :: [NThunk m]) ->
Just x -> force x $ fromValue >=> \(l :: [NThunk m]) ->
foldM go Nothing l
case mpath of
Nothing ->
@ -451,9 +451,9 @@ findEnvPathM name = do
where
go :: Maybe FilePath -> NThunk m -> m (Maybe FilePath)
go p@(Just _) _ = pure p
go Nothing l = force l $ fromNix >=> \(s :: HashMap Text (NThunk m)) ->
go Nothing l = force l $ fromValue >=> \(s :: HashMap Text (NThunk m)) ->
case M.lookup "path" s of
Just p -> force p $ fromNix >=> \(Path path) ->
Just p -> force p $ fromValue >=> \(Path path) ->
case M.lookup "prefix" s of
Nothing -> tryPath path Nothing
Just pf -> force pf $ fromNixMay >=> \case

View file

@ -241,17 +241,17 @@ unify context (Symbolic x) (Symbolic y) = do
writeVar y (NMany m)
packSymbolic (NMany m)
instance FromNix (AttrSet (SThunk m)) m (Symbolic m) where
instance FromValue (AttrSet (SThunk m)) m (Symbolic m) where
instance FromNix (AttrSet (SThunk m), AttrSet SourcePos) m (Symbolic m) where
instance FromValue (AttrSet (SThunk m), AttrSet SourcePos) m (Symbolic m) where
instance ToNix (AttrSet (SThunk m)) m (Symbolic m) where
instance ToValue (AttrSet (SThunk m)) m (Symbolic m) where
instance ToNix (AttrSet (SThunk m), AttrSet SourcePos) m (Symbolic m) where
instance ToValue (AttrSet (SThunk m), AttrSet SourcePos) m (Symbolic m) where
instance ToNix [SThunk m] m (Symbolic m) where
instance ToValue [SThunk m] m (Symbolic m) where
instance ToNix Bool m (Symbolic m) where
instance ToValue Bool m (Symbolic m) where
instance MonadLint e m => MonadThunk (Symbolic m) (SThunk m) m where
thunk = fmap coerce . buildThunk