[Haskell-cafe] A practical Haskell puzzle
Heinrich Apfelmus
apfelmus at quantentunnel.de
Fri Mar 4 14:38:30 CET 2011
Yitzchak Gale wrote:
> Eric Mertens wrote:
>> (but I've had my head in Agda lately)
>
> Indeed, coming across this problem tempted me
> to abandon the real world and take refuge in Agda.
>
>> http://hpaste.org/44469/software_stack_puzzle
>
> Wow, so simple, and no higher-rank types! This is the
> best solution yet. I am now truly in awe of the power
> of GADTs.
Just for reference, here a full version of my solution
http://hpaste.org/44503/software_stack_puzzle_annotat
It's almost the same as Eric's solution except that he nicely fused the
dropC and takeC functions into runLayers , thereby eliminating the
need for existential quantification.
However, note that GADTs subsume higher-rank types. With
data Exists f where
Exists :: f a -> Exists f
you can always encode them as
exists a. f a = Exists f
forall a. f a = (exists a. f a -> c) -> c = (Exists f -> c) -> c
Regards,
Heinrich Apfelmus
--
http://apfelmus.nfshost.com
More information about the Haskell-Cafe
mailing list