[Haskell-cafe] extreme newbie: hugs prompt vs load module
Brandon Moore
brandonm at yahoo-inc.com
Wed Aug 23 12:59:50 EDT 2006
George Young wrote:
> [linux, ghci 6.4.3.20060820, hugs May 2006]
>
> I have just started learning Haskell. I have hugs and ghci under
> linux, and I'm going through the Gentle Introduction to
> Haskell<http://www.haskell.org/tutorial>, so far through section 4,
> "case expressions and pattern matching". I'm a python programmer, with
> background in maclisp, scheme, T, C, C++, and a little J.
>
> I'm confused about what sort of things I can type at the interpreter
> prompt, and what things have to be loaded as a module. I keep trying
> to treat the prompt like a lisp or python REPL, which is obviously
> wrong. Can someone set me straight?
>
GHCi allows expressions, plus anything valid as a statement in a do
block (of IO). That's why you can use let without an "in" clause to make
bindings that stick around - you're getting the let form allowed in do
blocks. You can also bind use the arrow bindings, to get result out of
IO actions, like some_even <- fmap (*2) randomIO. (isn't this a good
answer to the perennial newbie question "how do I get a out of IO a"?)
I usually work with GHCi (ghci MyModdule.hs) next to an editor,
examining things in GHCi, then changing the code or adding things like
data type declarations that can't be done interactively, and reloading
the file (with :r). It works pretty well, though copying important
declarations from the session into the module to preserve them across a
reload is a bit annoying.
The usual approach of making a REPL accept any valid code in the
language wouldn't work so well for Haskell. It would be tough to
implement, because declarations can come in any order, and extremely
aggravating to use, because declarations can't be shadowed. Allowing
class and type declarations interactively would be nice (perhaps Hugs
already does?), but not a massive improvement alone. Maybe if there were
a feature to extract all the code necessary to reproduce some
interactively defined value?
Brandon
More information about the Haskell-Cafe
mailing list