Jim Apple wrote: > Even if this is denotationally different from a value like zero :: > Int, I think it is also different from getLine :: IO String. It > seems to mean something between these.
I think I understand your point better now: Do you want another denotational distinction, somewhere between the semantic simplicity of Int or [String] and the semantically intractable kitchen-sink IO? I'd like to see more exploration in that in-between space. Cheers, - Conal -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jim Apple Sent: Tuesday, January 18, 2005 12:15 AM To: haskell@haskell.org Subject: [Haskell] Re: Why is getArgs in the IO monad? I still think I'm missing your point, but let me take a stab at it. Conal Elliott wrote: > I'm suggesting you might better understand the > why of Haskell if you think denotationally (here about the meaning of > the [String] type), rather than operationally. The meaning of a type seems to be about what happens operationally. ":: [String]" is an operational guarantee, so if we let "getArgs :: [String]" that is a promise that there is some list of Strings at runtime. > I'm > guessing that none of those 2^32+1 values is what you'd mean by "length > getArgs". Well, I suppose I mean something like an existential type: there is some Int that is length getArgs. Even if this is denotationally different from a value like zero :: Int, I think it is also different from getLine :: IO String. It seems to mean something between these. I suppose my intuition is that it is closer to :: Int Jim _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell