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