Description
A library for kind-polymorphic manipulation and inspection of Proxy values.
Description
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