generic-data- Deriving instances with GHC.Generics and related utilities

Safe HaskellNone



Pack/unpack newtypes.


This is an internal module: it is not subject to any versioning policy, breaking changes can happen at any time.

If something here seems useful, please report it or create a pull request to export it from an external module.



class (Generic a, Coercible a (Old a), Newtype' a) => Newtype a Source #

Class of newtypes. There is an instance Newtype a if and only if a is a newtype and an instance of Generic.

(Generic a, Coercible a (Old a), Newtype' a) => Newtype a Source # 
Instance details

Defined in Generic.Data.Internal.Newtype

type Old a = GOld (Rep a) Source #

The type wrapped by a newtype.

newtype Foo = Foo { bar :: Bar } deriving Generic
-- Old Foo ~ Bar

type family GOld (f :: * -> *) where ... Source #


GOld (D1 _d (C1 _c (S1 _s (K1 _i b)))) = b 

type Newtype' a = NewtypeErr a (MetaDataNewtype (MetaOf (Rep a))) Source #

Use Newtype instead.

type family NewtypeErr a (b :: Bool) :: Constraint where ... Source #


NewtypeErr a True = () 
NewtypeErr a False = TypeError ((Text "The type " :<>: ShowType a) :<>: Text " is not a newtype.") 

unpack :: Newtype a => a -> Old a Source #

Generic newtype destructor.

pack :: Newtype a => Old a -> a Source #

Generic newtype constructor.