Re: Haskell-beginners problem with memory consuption

2003-10-02 Thread Ketil Malde
Petter Egesund [EMAIL PROTECTED] writes: I load my file in one chunk, and does a lot of substitutes on the string - this is quick eating all my memory and the computers start to get really slow. Keep in mind that Strings are lists of characters. I think (somebody correct me if I'm wrong) GHC

Re: SV: Haskell-beginners problem with memory consuption

2003-10-02 Thread Ketil Malde
Petter Egesund [EMAIL PROTECTED] writes: fun :: String - String look for pat1 in string - if found subst with sub1 look for pat2 in string - if found subst with sub2 look for pat3 in string - if found subst with sub3 recurse until no pattern is found I would structure

Re: interact behaves oddly if used interactively

2003-10-02 Thread Nicholas Nethercote
On Wed, 1 Oct 2003, Robert Ennals wrote: Haskell is a good language, pureness is good, type classes are good, monads are good - but laziness is holding it back. Hear hear. I have often wondered how much simpler the various Haskell implementations would be if they used strict evaluation. It

Re: interact behaves oddly if used interactively

2003-10-02 Thread Wolfgang Jeltsch
Am Donnerstag, 2. Oktober 2003, 10:52 schrieb Nicholas Nethercote: On Wed, 1 Oct 2003, Robert Ennals wrote: Haskell is a good language, pureness is good, type classes are good, monads are good - but laziness is holding it back. Hear hear. I have often wondered how much simpler the various

Newbie qustion about monads

2003-10-02 Thread Juanma Barranquero
I have an extremely-newbie question about monads and how to interpret the monadic laws; I asked that same question yesterday on IRC and the answers were interesting but non-conclusive (to me anyway). I'm trying to learn monads by reading All About Monads, version 1.0.2. I though of defining a

Re: Newbie qustion about monads

2003-10-02 Thread Marcin 'Qrczak' Kowalczyk
W licie z czw, 02-10-2003, godz. 11:13, Juanma Barranquero pisze: The intent is that Counted objects count the number of times an operation is applied to them. As you discovered, there is no meaningful count of operations. If an operation doesn't do anything, do you count it? I suppose yes -

Non-blocking keyboard peek

2003-10-02 Thread Adrian May
Hi folks, I have simulator which should grind away all night but check the keyboard once per iteration to see if I'm trying to view the results, change parameters or terminate it. Therefore I need a non-blocking keyboard peek function. So far, my searching only lead to some stuff about using

RE: Haskell-beginners problem with memory consuption

2003-10-02 Thread Simon Marlow
Keep in mind that Strings are lists of characters. I think (somebody correct me if I'm wrong) GHC will store a character inside a cons cell, but that still leaves 8 bytes per character. Worst case it will store the 8-byte cons cell pointing to a 32-bit char value, 12 bytes per character.

Re: Non-blocking keyboard peek

2003-10-02 Thread Malcolm Wallace
Adrian May [EMAIL PROTECTED] writes: Therefore I need a non-blocking keyboard peek function. So far, my searching only lead to some stuff about using threads in GHC but that seems far too complicated and messy. Look in the standard IO library for 'hReady', which is a non-blocking check for

Re: interact behaves oddly if used interactively

2003-10-02 Thread Olaf Chitil
Simon Marlow wrote: So, we're agreed that the presence of lazy evaluation makes implementing optimistic evaluation (and other evaluation strategies) more complicated. Personally, I find it disturbing that the presence of this family of library functions affects something as low-level as the

Re: interact behaves oddly if used interactively

2003-10-02 Thread Nicholas Nethercote
On Thu, 2 Oct 2003, Wolfgang Jeltsch wrote: Yes, but I think that the reason for laziness is not to make compiler constructors' lifes easier but language users'. I appreciate the prefer-users'-ease-over-compiler-writers' idea. For example, syntactic sugar can be a great thing. But I think

Re: swap leak problem

2003-10-02 Thread David Roundy
On Wed, Oct 01, 2003 at 03:06:50PM +0100, Simon Marlow wrote: ... Then run it with +RTS -DS -Sstderr, observe it going very slowly and see if it throws any assertion failures. I get a: ASSERTION FAILED: file Storage.c, line 875 This is in ghc CVS HEAD as of yesterday morning. It shows up

RE: interact behaves oddly if used interactively

2003-10-02 Thread Simon Marlow
The real problem is that lazy I/O injects side effects into the pure world of expressions. Haskell has a perfectly good system for encapsulating side effects - the IO monad. So why put these sneaky side effects into pure values? I fear one problem is that the word side effect is

Re: interact behaves oddly if used interactively

2003-10-02 Thread Nicholas Nethercote
On Thu, 2 Oct 2003, Nicholas Nethercote wrote: I appreciate the prefer-users'-ease-over-compiler-writers' idea. For example, syntactic sugar can be a great thing. But I think there's a point where it becomes too much. Haskell has arguably passed that point. Sorry, this was ambiguous; when

Re: Newbie qustion about monads

2003-10-02 Thread Juanma Barranquero
On Thu, 02 Oct 2003 11:22:13 +0200 Marcin 'Qrczak' Kowalczyk [EMAIL PROTECTED] wrote: As you discovered, there is no meaningful count of operations. If an operation doesn't do anything, do you count it? It's not about counting the operations (that's just an example), but accumulating any kind

Re: ANNOUNCE: HaRe, the Haskell Refactorer, version 0.1

2003-10-02 Thread ketil
(taken to -cafe) C.Reinke [EMAIL PROTECTED] writes: Dear Haskellers, as part of our project on Refactoring Functional Programs http://www.cs.kent.ac.uk/projects/refactor-fp/ we are pleased to announce the availability of HaRe 0.1 (also known as HaRe 01/10/2003 ;-), a snapshot of

Re: interact behaves oddly if used interactively

2003-10-02 Thread Thomas Johnsson
Nicholas Nethercote wrote: Also, I'm not convinced that laziness does make users' lives easier -- witness a lot of the traffic on this list. Witness the subject of this thread. In which case the extra difficulty heaped upon compiler writers is of questionable value. I'm convinced that if

Re: interact behaves oddly if used interactively

2003-10-02 Thread Nicholas Nethercote
On Thu, 2 Oct 2003, Thomas Johnsson wrote: I'm convinced that if laziness (or call by name) were the norm in languages in general, then there would be similar traffic in lists like this one about the problems of strict evaluation -- and there would be a lot more of it, since strictness

AW: Newbie qustion about monads

2003-10-02 Thread Markus . Schnell
I'm not trying to create useful monads (I'm pretty sure they aren't :), but understanding the concepts. So, the question remains: when the monad laws say that (return x) = f == f x The Monad class is just called Monad because it is intended to cover a monad. But it doesn't ensure the

Re: Newbie qustion about monads

2003-10-02 Thread Alastair Reid
So, the question remains: when the monad laws say that (return x) = f == f x what is intended in that ==? Observational equivalence. For monads like list and maybe, this boils down to the normal equality because the standard equality on these types is exactly observational equality.

Re: Newbie qustion about monads

2003-10-02 Thread Derek Elkins
On Thu, 02 Oct 2003 12:59:25 +0200 Juanma Barranquero [EMAIL PROTECTED] wrote: On Thu, 02 Oct 2003 11:22:13 +0200 Marcin 'Qrczak' Kowalczyk [EMAIL PROTECTED] wrote: As you discovered, there is no meaningful count of operations. If an operation doesn't do anything, do you count it? The

Re: AW: Newbie qustion about monads

2003-10-02 Thread Juanma Barranquero
On Thu, 2 Oct 2003 13:16:13 +0200 [EMAIL PROTECTED] wrote: The Monad class is just called Monad because it is intended to cover a monad. But it doesn't ensure the laws. That is your sole responsibility. Yeah, I know. But it's difficult to ensure I'm satisfying the laws when I'm not entirely

Re: Newbie qustion about monads

2003-10-02 Thread Marcin 'Qrczak' Kowalczyk
W licie z czw, 02-10-2003, godz. 12:59, Juanma Barranquero pisze: It's not about counting the operations (that's just an example), but accumulating any kind of state. For example: data Accum a = Ac [a] a instance Monad Accum where return x = Ac [x] x Ac _ x = f = let

Re: Newbie qustion about monads

2003-10-02 Thread Juanma Barranquero
On Thu, 2 Oct 2003 12:30:54 +0100 Alastair Reid [EMAIL PROTECTED] wrote: Observational equivalence. For monads like list and maybe, this boils down to the normal equality because the standard equality on these types is exactly observational equality. For monads like IO, you can't define

Re: AW: Newbie qustion about monads

2003-10-02 Thread Marcin 'Qrczak' Kowalczyk
W licie z czw, 02-10-2003, godz. 14:25, Juanma Barranquero pisze: Yeah, I know. But it's difficult to ensure I'm satisfying the laws when I'm not entirely sure what do they ask from me... 1. (return x) = f == f x 2. m = return == m 3. (m = f) = g == m = (\x - f x = g) My intuition: 1 2.

Re: Newbie qustion about monads

2003-10-02 Thread Juanma Barranquero
On Thu, 02 Oct 2003 14:27:29 +0200 Marcin 'Qrczak' Kowalczyk [EMAIL PROTECTED] wrote: Accumulating state is fine. These definitions don't accumulate state: 'return' should yield a neutral state, and the above = ignores the state of the lhs. You're right. data Accum s a = Ac [s] a

Re: ANNOUNCE: HaRe, the Haskell Refactorer, version 0.1

2003-10-02 Thread C.Reinke
First, let me say that I'm intrigued. This looks like really neat functionality to have available. Thanks; obviously, we think so, too! I'm curious whether you are planning (or have developed) tools to *detect* cases for refactoring? Occasionally, I find myself wishing for a tool to help

Re: Newbie qustion about monads

2003-10-02 Thread Alastair Reid
Incidentally, it is quite common to define a Monad instance but no Eq instance. (e.g., the IO monad, most parser monads, most state transformer monads, etc.) So you should not interpret the '==' in the monad law as requiring you to define an Eq instance. If you do define an Eq instance, it

Re: Newbie qustion about monads

2003-10-02 Thread Derek Elkins
From your examples and interpretations, it looks like you need to become more familiar and comfortable with -using- monads before you bother trying to write one. Then once you have that down, seeing how -correct- monads work would probably be the next most helpful thing. You'll have a very hard

Re: Lazy IO is useful! [Was: interact behaves oddly...]

2003-10-02 Thread Jan-Willem Maessen
Thomas Hallgren [EMAIL PROTECTED] replies to Simon M: Simon Marlow wrote: The real problem is that lazy I/O injects side effects into the pure world of expressions. Haskell has a perfectly good system for encapsulating side effects - the IO monad. So why put these sneaky side effects into

Re: interact behaves oddly if used interactively

2003-10-02 Thread Olaf Chitil
So... you agree that getContents in its current form should really be called unsafeGetContents? Unless perhaps we redefine its semantics to either (a) yield a random string or (b) eagerly slurp the entire stream contents? Well, I'm not sure that the semantics of getContents is currently

Using existential types

2003-10-02 Thread Graham Klyne
I've been trying to use existential types [*] in my code. [*] cf. Glasgow Haskell Compiler (GHC) user guide, section 7.3.12 My experiments have thrown up a couple of questions: 1. forall x introduces x as existential when it appears immediately preceding a datatype constructor declaration,

Re: Newbie qustion about monads

2003-10-02 Thread Juanma Barranquero
On Thu, 2 Oct 2003 16:09:11 +0100, Alastair Reid [EMAIL PROTECTED] wrote: So you should not interpret the '==' in the monad law as requiring you to define an Eq instance. If you do define an Eq instance, it ought to be reflexive, symmetric and transitive (i.e., an equivalence) if you want

Re: interact behaves oddly if used interactively

2003-10-02 Thread John Meacham
On Thu, Oct 02, 2003 at 12:08:07PM +0100, Nicholas Nethercote wrote: But I can't imagine they would complain about the problem of being confused... this strict code evaluated immediately, what's going on?! :) This is because strict evaluation is always easy to understand. Lazy/non-strict

Re: interact behaves oddly if used interactively

2003-10-02 Thread John Meacham
On Thu, Oct 02, 2003 at 11:48:29AM +0100, Simon Marlow wrote: So... you agree that getContents in its current form should really be called unsafeGetContents? Unless perhaps we redefine its semantics to either (a) yield a random string or (b) eagerly slurp the entire stream contents?

Re: interact behaves oddly if used interactively

2003-10-02 Thread Thomas Hallgren
John Meacham wrote: personally, I think the easiest solution would be to punt the whole issue by having: getContents lazily read the file if it is mmapable or a pipe eagerly slurp the whole file if it refers to a tty I think this kind of irregular behaviour would make the IO functions even

Re: Using existential types

2003-10-02 Thread oleg
data Datatype ex = forall vt . Datatype (DatatypeVal ex vt) In practice one rarely would write forall vt. Datatype (DatatypeVal ex vt) unless he is writing something like the ST monad. You can only pass vt to functions with the signature forall vt. vt - C1 vt C2 C3 ... where

Pre-Call for Contributions -- HCA Report (November 2003 edition)

2003-10-02 Thread C.Reinke
[apologies for multiple copies - experience has shown that not all Haskellers can be reached via the main Haskell list anymore] An entry for your diaries (no other action required right now): --Pre-Call Your contributions to the