Search code examples
haskelltestingmultilineghci

How can I run multiple statements in GHCi?


I'm doing some very simple performance testing of a simple function that I believe has O(n)(squared) performance (or worse).

Currently I'm running multiple statements which is tedious to repeat:

ghci> myfunction 0 100
true
ghci> myfunciton 0 200
true
ghci> myfunction 0 300
true
ghci> :r

Is there a way I can run all four GHCi statements? I can't just combine them using "native" Haskell as I'd like to include the :r (which is a GHCi statement - not exactly Haskell) that gets run at the end.


Solution

  • You can define a custom GHCi command using :def in this way:

    > :def foo (\_ -> return "print 100\nprint 200\n:t length")
    > :foo
    100
    200
    length :: Foldable t => t a -> Int
    

    In the returned string, :-commands can be included as well, like :t above.