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:
parent
39e7ae6133
commit
00a5a94c60
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user