ghc command line evaluation
Björn Bringert
bringert at cs.chalmers.se
Wed Apr 5 16:52:11 EDT 2006
Benjamin Franksen wrote:
> On Wednesday 05 April 2006 20:32, Pedro Miguel Duarte wrote:
>
>>I am writing a Java program with a call to a Haskell module M.hs,
>>in order to evaluate some expression expr.
>>
>>A very simple idea, which I got somewhere in the net, is to create a
>>Process object p which executes a GHC command-line instruction:
>>
>>Process p = Runtime.getRuntime();
>>p.exec( " ghc M.hs -e \"expr\" " );
>>
>>
>>This would be very simple, if it worked...
>>
>>
>>My problem is that expressions i want to evaluate involve
>>strings, and GHC command-line 'ghc' misinterprets some special
>>symbols when it parses double quoted strings.
>>
>>For instance,
>> ghc -e " reverse \"2<3\" " gives an error!
>
>
> Hmm. On my Linux machine (running zsh):
>
> ben at sarun: .../play/ghc-e > ghc -e " reverse \"2<3\" "
> "3<2"
>
> But now I see that you run 'p.exec' in Java which probably translates
> (more or less) to a 'exec' system call. 'exec' is not a shell, it
> cannot translate complex quotings and unquotings. I would try
>
> p.exec( "/bin/sh ghc M.hs -e \"expr\" " );
>
> or something similar.
Another way could be to use one of the other exec() methods (which BTW
are available from the Runtime class, not the Process class). For
example, using the "exec(String[] cmdarray)" version, you could write
something like (not tested):
Runtime r = Runtime.getRuntime();
Process p = r.exec(new String[]{"ghc", "-e", expr});
/Björn
More information about the Glasgow-haskell-users
mailing list