witch-0.2.1.0: Convert values from one type into another.
Safe HaskellNone
LanguageHaskell2010

Witch.Casting

Synopsis

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

Constructors

Casting source 

Instances

Instances details
Cast s (Casting s t) Source #

Uses coerce.

Instance details

Defined in Witch.Casting

Methods

cast :: s -> Casting s t Source #

(Cast t s, Bounded t) => Bounded (Casting s t) Source # 
Instance details

Defined in Witch.Casting

Methods

minBound :: Casting s t #

maxBound :: Casting s t #

(Cast s t, Cast t s, Enum t) => Enum (Casting s t) Source # 
Instance details

Defined in Witch.Casting

Methods

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 # 
Instance details

Defined in Witch.Casting

Methods

(==) :: Casting s t -> Casting s t -> Bool #

(/=) :: Casting s t -> Casting s t -> Bool #

(Cast s t, Ord t) => Ord (Casting s t) Source # 
Instance details

Defined in Witch.Casting

Methods

compare :: Casting s t -> Casting s t -> Ordering #

(<) :: Casting s t -> Casting s t -> Bool #

(<=) :: Casting s t -> Casting s t -> Bool #

(>) :: Casting s t -> Casting s t -> Bool #

(>=) :: Casting s t -> Casting s t -> Bool #

max :: Casting s t -> Casting s t -> Casting s t #

min :: Casting s t -> Casting s t -> Casting s t #

(Cast t s, Read t) => Read (Casting s t) Source # 
Instance details

Defined in Witch.Casting

(Cast s t, Show t) => Show (Casting s t) Source # 
Instance details

Defined in Witch.Casting

Methods

showsPrec :: Int -> Casting s t -> ShowS #

show :: Casting s t -> String #

showList :: [Casting s t] -> ShowS #

Cast (Casting s t) s Source #

Uses coerce.

Instance details

Defined in Witch.Casting

Methods

cast :: Casting s t -> s Source #