[Haskell-cafe] Proving correctness

Tillmann Rendel rendel at informatik.uni-marburg.de
Mon Feb 14 12:54:55 CET 2011


Pedro Vasconcelos wrote:
> This is because all input and output data flow is type checked in a
> function application, whereas imperative side effects might escape
> checking.
>
> For example, the type signature for a variable swapping procedure in C:
>
> 	void swap(int *a, int *b)
>
> This will still type check even if it modified only one of the argument
> references. However, if written functionally, it must return a pair:
>
> 	swap :: (Int,Int) ->  (Int,Int)

This benefit of explicit input and output values can interact nicely 
with parametric polymorphism:

   swap :: (a, b) -> (b, a)

This more general type signature makes sure we are not just returning 
the input values unswapped.

   Tillmann



More information about the Haskell-Cafe mailing list