some-1.0.4.1: Existential type: Some

Safe Haskell | Safe
Language | Haskell2010

Data.GADT.Show

Contents

- Showing
- Reading

Synopsis

- class GShow t where
  - gshowsPrec :: Int -> t a -> ShowS
- defaultGshowsPrec :: Show (t a) => Int -> t a -> ShowS
- gshows :: GShow t => t a -> ShowS
- gshow :: GShow t => t a -> String
- class GRead t where
  - greadsPrec :: Int -> GReadS t
- type GReadS t = String -> [(Some t, String)]
- greads :: GRead t => GReadS t
- gread :: GRead t => String -> (forall a. t a -> b) -> b
- greadMaybe :: GRead t => String -> (forall a. t a -> b) -> Maybe b
- getGReadResult :: Some tag -> (forall a. tag a -> b) -> b
- mkGReadResult :: tag a -> Some tag

# Showing

class GShow t where Source #

`Show`-like class for 1-type-parameter GADTs. `GShow t => ...` is equivalent to something like `(forall a. Show (t a)) => ...`. The easiest way to create instances would probably be to write (or derive) an `instance Show (T a)`, and then simply say:

    instance GShow t where gshowsPrec = defaultGshowsPrec

Methods

gshowsPrec :: Int -> t a -> ShowS Source #

#### Instances

Instances details

GShow (TypeRep :: k -> Type) Source # |
Instance details Defined in Data.GADT.Internal Methods gshowsPrec :: forall (a :: k0). Int -> TypeRep a -> ShowS Source #
GShow ((:~:) a :: k -> Type) Source # |
Instance details Defined in Data.GADT.Internal Methods gshowsPrec :: forall (a0 :: k0). Int -> (a :~: a0) -> ShowS Source #
GShow (GOrdering a :: k -> Type) Source # |
Instance details Defined in Data.GADT.Internal Methods gshowsPrec :: forall (a0 :: k0). Int -> GOrdering a a0 -> ShowS Source #

(GShow a, GShow b) => GShow (Product a b :: k -> Type) Source #

    >>> gshow (Pair Refl Refl :: Product ((:~:) Int) ((:~:) Int) Int)
    "Pair Refl Refl"

Instance details Defined in Data.GADT.Internal Methods gshowsPrec :: forall (a0 :: k0). Int -> Product a b a0 -> ShowS Source #

(GShow a, GShow b) => GShow (Sum a b :: k -> Type) Source #

    >>> gshow (InL Refl :: Sum ((:~:) Int) ((:~:) Bool) Int)
    "InL Refl"

Instance details Defined in Data.GADT.Internal Methods gshowsPrec :: forall (a0 :: k0). Int -> Sum a b a0 -> ShowS Source #
GShow ((:~~:) a :: k -> Type) Source # | Since: 1.0.4
Instance details Defined in Data.GADT.Internal Methods gshowsPrec :: forall (a0 :: k0). Int -> (a :~~: a0) -> ShowS Source #

(GShow a, GShow b) => GShow (a :*: b :: k -> Type) Source #

    >>> gshow (Pair Refl Refl :: Product ((:~:) Int) ((:~:) Int) Int)
    "Refl :*: Refl"

Since: 1.0.4

Instance details Defined in Data.GADT.Internal Methods gshowsPrec :: forall (a0 :: k0). Int -> (a :*: b) a0 -> ShowS Source #

(GShow a, GShow b) => GShow (a :+: b :: k -> Type) Source #

    >>> gshow (L1 Refl :: ((:~:) Int :+: (:~:) Bool) Int)
    "L1 Refl"

Since: 1.0.4

Instance details Defined in Data.GADT.Internal Methods gshowsPrec :: forall (a0 :: k0). Int -> (a :+: b) a0 -> ShowS Source #

defaultGshowsPrec :: Show (t a) => Int -> t a -> ShowS Source #

If `f` has a 'Show (f a)' instance, this function makes a suitable default implementation of `gshowsPrec`.

Since: 1.0.4

gshows :: GShow t => t a -> ShowS Source #

gshow :: GShow t => t a -> String Source #

# Reading

class GRead t where Source #

`Read`-like class for 1-type-parameter GADTs. Unlike `GShow`, this one cannot be mechanically derived from a `Read` instance because `greadsPrec` must choose the phantom type based on the `String` being parsed.

Methods

greadsPrec :: Int -> GReadS t Source #

#### Instances

Instances details

GRead ((:~:) a :: k -> Type) Source # |
Instance details Defined in Data.GADT.Internal Methods greadsPrec :: Int -> GReadS ((:~:) a) Source #
GRead (GOrdering a :: k -> Type) Source # |
Instance details Defined in Data.GADT.Internal Methods greadsPrec :: Int -> GReadS (GOrdering a) Source #
(GRead a, GRead b) => GRead (Sum a b :: k -> Type) Source # |
Instance details Defined in Data.GADT.Internal Methods greadsPrec :: Int -> GReadS (Sum a b) Source #
(GRead a, GRead b) => GRead (a :+: b :: k -> Type) Source # | Since: 1.0.4
Instance details Defined in Data.GADT.Internal Methods greadsPrec :: Int -> GReadS (a :+: b) Source #
k1 ~ k2 => GRead ((:~~:) a :: k2 -> Type) Source # | Since: 1.0.4
Instance details Defined in Data.GADT.Internal Methods greadsPrec :: Int -> GReadS ((:~~:) a) Source #

type GReadS t = String -> [(Some t, String)] Source #

`GReadS t` is equivalent to `ReadS (forall b. (forall a. t a -> b) -> b)`, which is in turn equivalent to `ReadS (Exists t)` (with `data Exists t where Exists :: t a -> Exists t`)

greads :: GRead t => GReadS t Source #

gread :: GRead t => String -> (forall a. t a -> b) -> b Source #

greadMaybe :: GRead t => String -> (forall a. t a -> b) -> Maybe b Source #

    >>> greadMaybe "InL Refl" mkSome :: Maybe (Some (Sum ((:~:) Int) ((:~:) Bool)))
    Just (mkSome (InL Refl))

    >>> greadMaybe "L1 Refl" mkSome :: Maybe (Some ((:~:) Int :+: (:~:) Bool))
    Just (mkSome (L1 Refl))

    >>> greadMaybe "garbage" mkSome :: Maybe (Some ((:~:) Int))
    Nothing

getGReadResult :: Some tag -> (forall a. tag a -> b) -> b Source #

mkGReadResult :: tag a -> Some tag Source #