GHCi: scripting and multiline input

Vivian McPhail haskell.vivian.mcphail at
Tue Sep 14 00:23:23 EDT 2010


I am attempting to mimic matlab/octave using ghci, including a facility for
updateable graphs of data.

1) It would be nice to be able to load a script of commands from the prompt


script Sine where

import "hmatrix" Numeric.Vector
import "plot" Graphics.Rendering.Plot

let ts = linspace 1000 (0,1 :: Double)
let ss = sin (15*2*pi*ts) -- 15 Hz sine wave

figure1 <- display $ plot (ts,[line ss blue])


The idea is (apart from the import commands) is each line is equivalent to
an input line in ghci.  Note that the last line binds a variable from an
action in the top level IO monad, something not possible in a module.

2) It would be nice to have multiline inputs if the parser can tell that the
input is incomplete rather than malformed.  One case is an empty 'do'


Prelude> :load Sine
Sine> :show bindings
ts :: Data.Vector.Storable Double
ss :: Data.Vector.Storable Double
figure :: Graphics.Rendering.Plot.Figure.Figure ()
Sine> withFigureMVar figure1 $ do
     Figure a >                           withTitle $ do
     Text a >                                             setText "15 Hz
sine wave"
     Text a >                                             setFontSize 16
     Text a >
     Figure a >


(an empty line ends the 'do' construct and returns to next higher level).

Is this a feasible addition to GHCi?  This way the full power of GHCi is
accessible to an interactive mathematics session rather than developing a
custom interface on top of the GHC API.

-------------- next part --------------
An HTML attachment was scrubbed...

More information about the Glasgow-haskell-users mailing list