Add a function embed :: NValueNF m -> m (NValue m) in Normal.hs

This commit is contained in:
John Wiegley 2018-04-10 22:06:35 -07:00
parent c2aaec0e9e
commit f8ff1c7522

View file

@ -4,6 +4,7 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module Nix.Normal where
@ -35,6 +36,19 @@ normalForm :: (MonadThunk (NValue m) (NThunk m) m)
=> NValue m -> m (NValueNF m)
normalForm = normalFormBy force
embed :: forall m. (MonadThunk (NValue m) (NThunk m) m)
=> NValueNF m -> m (NValue m)
embed (Fix x) = case x of
NVConstant a -> return $ NVConstant a
NVStr t s -> return $ NVStr t s
NVList l -> NVList . fmap (value @_ @_ @m)
<$> traverse embed l
NVSet s p -> flip NVSet p . fmap (value @_ @_ @m)
<$> traverse embed s
NVClosure p f -> return $ NVClosure p f
NVPath fp -> return $ NVPath fp
NVBuiltin name f -> return $ NVBuiltin name f
valueText :: forall e m. (Framed e m, MonadFile m, MonadEffects m)
=> Bool -> NValueNF m -> m (Text, DList Text)
valueText addPathsToStore = cata phi