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
|
when (isJust fn) $ putStrLn $ show $ (fromJust fn) 7
|
||||||
}
|
}
|
||||||
\end{quote}
|
\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}
|
\subsection{Foreign Eval}
|
||||||
|
|
||||||
A preliminary binding to \code{eval} has been implemented to allow C
|
A preliminary binding to \code{eval} has been implemented to allow C
|
||||||
|
@ -28,6 +28,7 @@ module System.Eval.Haskell (
|
|||||||
unsafeEval,
|
unsafeEval,
|
||||||
unsafeEval_,
|
unsafeEval_,
|
||||||
typeOf,
|
typeOf,
|
||||||
|
mkHsValues,
|
||||||
|
|
||||||
hs_eval_b, -- return a Bool
|
hs_eval_b, -- return a Bool
|
||||||
hs_eval_c, -- return a CChar
|
hs_eval_c, -- return a CChar
|
||||||
@ -46,6 +47,7 @@ import AltData.Dynamic ( Dynamic )
|
|||||||
import AltData.Typeable ( Typeable )
|
import AltData.Typeable ( Typeable )
|
||||||
|
|
||||||
import Data.Either
|
import Data.Either
|
||||||
|
import Data.Map as Map
|
||||||
|
|
||||||
import System.IO
|
import System.IO
|
||||||
import System.Directory
|
import System.Directory
|
||||||
@ -151,7 +153,15 @@ unsafeEval_ src mods args ldflags incs = do
|
|||||||
MakeFailure err -> return $ Left err
|
MakeFailure err -> return $ Left err
|
||||||
makeCleaner tmpf
|
makeCleaner tmpf
|
||||||
return e_rsrc
|
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
|
-- return a compiled value's type, by using Dynamic to get a
|
||||||
|
Loading…
x
Reference in New Issue
Block a user