[Haskell-cafe] On hGetContents semi-closenesscloseness
Ertugrul Soeylemez
es at ertes.de
Wed Feb 16 11:17:54 CET 2011
-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160
Brandon S Allbery KF8NH <allbery.b at gmail.com> wrote:
> Haskell is actually what manufacturing folks call "just in time";
> things are evaluated when they are needed. Usually this means that
> when you output something, anything needed to compute that output will
> be done then. The exceptions are things like
> Control.Exception.evaluate (which you can treat as doing output but
> without *actually* outputting anything), mentioned above, plus you can
> indicate that some computation must be evaluated before another by
> means of Prelude.seq. You can also declare a type as being strict by
> prefixing an exclamation mark (so the runtime will always evaluate a
> computation before binding it), and with the BangPatterns extension
> you can also declare a pattern match binding as strict the same way.
Note that pattern matches are strict by default. In fact, a pattern
match is the preferred way to force evaluation. Bang patterns only make
sure that variables (i.e. wildcards, which wouldn't be evaluated
otherwise) in a pattern match are evaluated to WHNF:
case expr of
Just x -> ...
Nothing ->
This is strict in the Maybe constructors, but non-strict in the argument
of Just. When using a bang pattern,
Just (!x) -> ...
the match is also strict in the argument of Just. A bang pattern is
really just a shortcut for using 'seq':
Just x -> seq x $ ...
or as some people prefer to write it:
Just x | seq x True -> ...
Greets,
Ertugrul
- --
nightmare = unsafePerformIO (getWrongWife >>= sex)
http://ertes.de/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
iQIcBAEBAwAGBQJNW6RSAAoJENVqN/rl3Y0RpmcQAI8no1y9NopXHKx0zCV+xV4W
R2i2JdkPl8s7z+BpQLFqdKk+y9CfhqDLTwE+v8ek7fhnJXFWHqvGpi/1p6u3DRuO
/ho8YNrzp8gKj0EF0Dn0VCwZ7qdmDBtmNXdHlMUzz2pTd968/9tK0FyUSb20qiBT
Suv8lPv8shsGfYX29apo1JCcHRplfeS9wJpIk0/J5xaddTDElL0CBMWkehRFFlHi
MVB3KS/6VnCqTCd8RtykzzmxtN2d+sf4a96h9RQWFt/62UPGfH04l2kY+1YiP6fK
OaV0iqHyM1TLKT/tzp+duZ57TJ2MX5h00WczHduE01Y+7nnB8b67TAvUXJI21IwA
loh1rHlqSoPI/lF1Ti5iJEF2K74waONtl7AM+lmOQZDVuipALQvesXSWTEvS18Mm
fo052MUwzWgAXU4hwod5ZvjUNR92Z9vL5JAb1MP7DShE+sLJiXYDAD381XKU6FSi
0C4rMo553JXJcMNrnJhzdxDrfJCzcHIdePG6XOkH+EzRIUPs+mYlHuNTrFbZtyzC
LzqfIwDMRQLo0f3KT5cj+6eDV/sUELW3seaTFUSCfIQhJ3molsimQHQy7YsJvvp7
fkcxpAfnAegiTQydfvUFFsdW+ZELeZTyW06iedMisUx1Lhww4Butee8PTZex3jHV
qH/RghfnSK3w/cwiZez2
=ecix
-----END PGP SIGNATURE-----
More information about the Haskell-Cafe
mailing list