strict-types-0.1.3: A type level predicate ranging over strict types

Safe HaskellNone
LanguageHaskell2010

Type.Strict

Description

Type constraints and patterns for strict types.

Synopsis

Documentation

pattern Strict :: Strict a => a -> a Source #

A pattern that matches Strict types only

pattern Rnf :: NFData a => a -> a Source #

A pattern that matches NFData types only and forces values to rigid normal form

type family Strict a :: Constraint where ... Source #

A constraint that is satisfied only by strict types.

A type T is strict if

∀x :: T . rnf x = ⊥ <=> rwhnf x = ⊥

Mutually recursive types are experimentally supported but non regular types are not.

Equations

Strict d = StrictType '[d] d 

class StrictType (seen :: [*]) a Source #

An empty class to constrain strict types. An instance is an unchecked promise that a type is fully strict. No instances are needed for generic non-nested datatypes.

Define an instance as follows:

instance StrictType seen Foo
Instances
StrictRep (d ': seen) (Rep d) => StrictType seen (d :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen Text Source # 
Instance details

Defined in Type.Strict

StrictType seen ByteString Source # 
Instance details

Defined in Type.Strict

StrictType seen Word64 Source # 
Instance details

Defined in Type.Strict

StrictType seen Word32 Source # 
Instance details

Defined in Type.Strict

StrictType seen Word16 Source # 
Instance details

Defined in Type.Strict

StrictType seen Word8 Source # 
Instance details

Defined in Type.Strict

StrictType seen Word Source # 
Instance details

Defined in Type.Strict

StrictType seen Integer Source # 
Instance details

Defined in Type.Strict

StrictType seen Int64 Source # 
Instance details

Defined in Type.Strict

StrictType seen Int32 Source # 
Instance details

Defined in Type.Strict

StrictType seen Int16 Source # 
Instance details

Defined in Type.Strict

StrictType seen Int8 Source # 
Instance details

Defined in Type.Strict

StrictType seen Int Source # 
Instance details

Defined in Type.Strict

StrictType seen Double Source # 
Instance details

Defined in Type.Strict

StrictType seen Char Source # 
Instance details

Defined in Type.Strict

StrictType seen (Vector a :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen (Vector a :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen (Vector a :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen k => StrictType seen (HashSet k :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen k => StrictType seen (Set k :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen a => StrictType seen (Hashed a :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen (Forced a :: *) Source # 
Instance details

Defined in Data.Strict.Forced

StrictType seen (MVector s a :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen (MVector s a :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen (MVector s a :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen (StorableArray ix v :: *) Source # 
Instance details

Defined in Type.Strict

StrictType seen (UArray ix v :: *) Source # 
Instance details

Defined in Type.Strict

(StrictType seen k, StrictType seen v) => StrictType seen (HashMap k v :: *) Source # 
Instance details

Defined in Data.Strict.HashMap