Safe Haskell | None |
---|---|
Language | Haskell2010 |
Documentation
newtype Casting source target Source #
This type mostly exists to make it easier to derive instances through
some other type. It does this by leaning on the Cast
type class. For
example, consider this data type:
data Toggle = Off | On instance Cast Toggle String where cast toggle = case toggle of Off -> "off" On -> "on"
If you wanted to implement a Show
instance for Toggle
by going through
a String
, you would need to write something like this:
instance Show Toggle where show = show . into @String
That may not very complicated, but at the same time it is not very
interesting. And it can be tricky if you want to keep other instances (like
Read
) in sync. That's where the Casting
type comes in! You can
derive the above instance like so:
data Toggle = Off | On deriving Show via Casting Toggle String
Casting source |
Instances
Cast s (Casting s t) Source # | Uses |
Defined in Witch.Casting | |
(Cast t s, Bounded t) => Bounded (Casting s t) Source # | |
(Cast s t, Cast t s, Enum t) => Enum (Casting s t) Source # | |
Defined in Witch.Casting succ :: Casting s t -> Casting s t # pred :: Casting s t -> Casting s t # toEnum :: Int -> Casting s t # fromEnum :: Casting s t -> Int # enumFrom :: Casting s t -> [Casting s t] # enumFromThen :: Casting s t -> Casting s t -> [Casting s t] # enumFromTo :: Casting s t -> Casting s t -> [Casting s t] # enumFromThenTo :: Casting s t -> Casting s t -> Casting s t -> [Casting s t] # | |
(Cast s t, Eq t) => Eq (Casting s t) Source # | |
(Cast s t, Ord t) => Ord (Casting s t) Source # | |
Defined in Witch.Casting | |
(Cast t s, Read t) => Read (Casting s t) Source # | |
(Cast s t, Show t) => Show (Casting s t) Source # | |
Cast (Casting s t) s Source # | Uses |
Defined in Witch.Casting |