[Haskell-beginners] Re: Enforcing Monad Laws
Heinrich Apfelmus
apfelmus at quantentunnel.de
Fri Jul 2 04:04:41 EDT 2010
Jorden M wrote:
> C++ `Concepts', which almost made it into the C++0x standard, are
> roughly similar to Haskell type classes. The proposal for concepts in
> C++ had a feature called axioms, which allow the programmer to specify
> semantics on the functions the concept contains. This allows for
> enforcing things such as the Monad Laws, as well as letting the
> compiler make certain optimizations it may not have been able to make
> without axiomatic guarantees.
I have a hard time imagining that axioms are being used to prove
properties about programs in a language such as C++... :) Any pointers?
> Why does Haskell not have a similar
> functionality in its type classes? Was there not time, desire, etc.?
> Or are there technical limitations?
If you want to exploit algebraic identities like, say,
map f . map g = map (f . g)
for program optimization, you can use the RULE pragma in GHC.
If you want to use the axioms to prove your program correct, you are
beginning to leave the scope of Haskell. Have a look at dependently
typed languages and proof assistants like Agda and Coq . For
instance, the latter can extract Haskell programs from proofs.
That being said, enforcing invariants in the types, using quickcheck and
good old pen & paper calculations can carry you a long way towards
program correctness in Haskell.
Regards,
Heinrich Apfelmus
--
http://apfelmus.nfshost.com
More information about the Beginners
mailing list