[Haskell] Announce: revamped free theorems generator
sebf at informatik.uni-kiel.de
Tue Jun 22 06:27:03 EDT 2010
On Jun 20, 2010, at 12:47 PM, Janis Voigtländer wrote:
>> I tried to use the free theorem generator in order to check whether
>> the only values of type `(Bool -> a) -> a` are `($True)` and
> Did you manage to do this now?
Now it seems you did it for me, thanks!
I am interested in a more general statement like
For every given type a and function f :: forall b . (a -> b) -> b
there exists an x :: a such that f = ($x) .
> Using the main result of our ESOP paper (Testing Polymorphic
> you can get there for a large class of input types.
suggests that this may not be true for certain types a .
I need to read his paper again for the proof idea. Maybe I'll find a
counter example then.
A variant of the above statement incorporating type classes is:
For every given type a and function
f :: forall b . Monoid b => ((a -> b) -> b)
one of the following cases holds:
there exists x such that f = \k -> k x
f = \_ -> mempty
there exists g and h such that f = \k -> g k `mappend` h k
I find these statements plausible and would be interested in counter
examples. If they are true, I'd feel that they may be easily shown by
type information only, that is via free theorems.
Underestimating the novelty of the future is a time-honored tradition.
More information about the Haskell