
Am 17.05.19 um 12:33 schrieb Juan Miguel Vilar:
El 17/5/19 a las 11:56, ALeX Kazik escribió:
Now, the problem is what can I do to have a type that contains a single Int? Is there a sort of id for types so that I can write
Identity is the solution
f :: Example Identity Int -> Int f (Example i) = 2 * runIdentity i
Thank you Alex, but this forces the use of runIdentity. I am aware that Identity Int and Int are isomorphic, but my problem is more aesthetic, I would like that the f t was t. I want to use it in a library and I don't want the users to be aware of details that should be irrelevant. Sometimes they will use lists, sometimes simple times, and would like that to be as transparent as possible.
https://reasonablypolymorphic.com/blog/higher-kinded-data/ shows how to do that using closed type families. Cheers Ben