Added mkHsValues helper function

I was using this function in a project of mine, and I think it's generally useful.
This commit is contained in:
hellish 2005-05-26 17:49:10 +00:00
parent 39e7ae6133
commit 00a5a94c60
2 changed files with 25 additions and 2 deletions

View File

@ -781,7 +781,20 @@ main = do fn <- unsafeEval "(\\(x::Int) -> (x,x))" [] :: IO (Maybe (Int -> (Int,
when (isJust fn) $ putStrLn $ show $ (fromJust fn) 7
}
\end{quote}
\subsection{Utilities for use with eval}
\code{hs-plugins} proves the following utilities for use with \code{eval}:
\begin{itemize}
\item
\code{mkHsValues} is a helper function for converting \code{Data.Map}s
of names and values into Haskell code. It relies on the assumption
that the passed values' Show instances produce valid Haskell
literals (this is true for all prelude types). It's type is as follows:
\begin{quote}
\scm{
mkHsValues :: (Show a) => Data.Map String a -> String
}
\end{quote}
\end{itemize}
\subsection{Foreign Eval}
A preliminary binding to \code{eval} has been implemented to allow C

View File

@ -28,6 +28,7 @@ module System.Eval.Haskell (
unsafeEval,
unsafeEval_,
typeOf,
mkHsValues,
hs_eval_b, -- return a Bool
hs_eval_c, -- return a CChar
@ -46,6 +47,7 @@ import AltData.Dynamic ( Dynamic )
import AltData.Typeable ( Typeable )
import Data.Either
import Data.Map as Map
import System.IO
import System.Directory
@ -151,7 +153,15 @@ unsafeEval_ src mods args ldflags incs = do
MakeFailure err -> return $ Left err
makeCleaner tmpf
return e_rsrc
------------------------------------------------------------------------
--
-- Convenience function for use with eval (and friends). Returns a
-- string of Haskell code with the Data.Map passed as values.
--
mkHsValues :: (Show a) => Map.Map String a -> String
mkHsValues values = concat $ elems $ Map.mapWithKey convertToHs values
where convertToHs :: (Show a) => String -> a -> String
convertToHs name value = name ++ " = " ++ show value ++ "\n"
------------------------------------------------------------------------
--
-- return a compiled value's type, by using Dynamic to get a