The proxy-kindness package
It can be useful (especially with @PolyKinds@) to get the \"bare\" type (e.g. @Either@) of some parameterized type (e.g. @Either Char Int@). This library provides closed classes that can strip and reapply type arguments, as well as useful utility functions. Here are some examples:
Force @Left 1@ to be of type @Either Float a@ using a partially-applied 'Proxy'.
>>> let t = (Left 1) `asApplied` (Proxy :: Proxy (Either Float)) >>> :t t t :: Either Float a
Do the same, but illustrating type application with @ap@
>>> let t0 = (Left 1) `asApplied` ((Proxy :: Proxy Either) `ap` (Proxy :: Proxy Float)) >>> :t t0 t0 :: Either Float a
Force polymorphic @undefined@ to some polymorphic @Either@ type, the base type of @t@ defined above.
>>> let u = undefined `asApplied` (unappliedOf t) >>> :t u u :: Either a a1
|Dependencies||base (==4.6.*), tagged [details]|
|Source repository||head: git clone https://github.com/jberryman/proxy-kindness.git -b master|
|Uploaded||Fri Nov 15 02:19:41 UTC 2013 by BrandonSimmons|
|Downloads||330 total (7 in the last 30 days)|
|Status||Docs available [build log]
Successful builds reported [all 1 reports]
For package maintainers and hackage trustees