typo, "sees the input" => "must enter the input" On Fri, Aug 21, 2009 at 10:28 PM, Peter Verswyvelen <[email protected]>wrote:
> The question is, in this case when the user gets to see a bit too much of > the output before he sees the input, if that really qualifies as an > "incorrect" program. It's a bit in the gray zone I guess. You could even > argue that it's a feature that input and output are not really synched, they > are lazy, input is only read when evaluated; if you want to sync them, use a > syncIO action ;-) no that's silly of course. > Oh well, thanks for all the input, this was very informative for me hacker. > > On Fri, Aug 21, 2009 at 10:20 PM, David Menendez <[email protected]>wrote: > >> On Fri, Aug 21, 2009 at 3:29 PM, Peter Verswyvelen<[email protected]> >> wrote: >> > On Fri, Aug 21, 2009 at 6:53 PM, David Menendez <[email protected]> >> wrote: >> >> >> >> Some people dislike seq because it lets you force strictness >> >> in cases where pattern matching cannot (like function arguments), but >> >> hardly anyone objects to pattern matching. >> > >> > Ah so it's subjective. Okay, it's sometimes hard for a newbie to find >> the >> > "truth" when several experts contradict eachother. Because often when >> people >> > claim something here, they have very good reasons for it, reasons that >> are >> > not obvious at all to your average newbie! >> >> You can make a pretty good argument that programs which rely on >> strictness for correctness (as opposed to space/time issues) are >> risky, because it's easy to get things wrong by accident. Internally, >> the IO monad may rely on strictness to make sure things happen in the >> proper sequence, but all of that is hidden so we don't have to worry >> about things like output happening too early because we haven't >> examined some input yet. >> >> This is also why some people object to getContents. >> >> >> For laughs, here's an example of IO code written using Haskell's old >> stream-based IO system, taken from "A History of Haskell": >> >> main :: Behaviour >> main ~(Success : ~((Str userInput) : ~(Success : ~(r4 : _)))) >> = [ AppendChan stdout "enter filename\n", >> ReadChan stdin, >> AppendChan stdout name, >> ReadFile name, >> AppendChan stdout >> (case r4 of >> Str contents -> contents >> Failure ioerr -> "can’t open file") >> ] where (name : _) = lines userInput >> >> >> It has a certain elegant purity, but I'm glad I don't have to use it. >> >> -- >> Dave Menendez <[email protected]> >> <http://www.eyrie.org/~zednenem/> >> > >
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
