instances

Given a Purescript type, generate instances for typeclass instances it claims to have.
typeclass instance information for Eq, Ord and Listable
Used in the definition of subInstances in Generalizable typeclass instances.
Deprecated: This module now contains no instances and will be removed in the future
This module includes orphan instances for (,), Either and Const that should be supplied by base. These have moved to semigroupoids as of 4.2.
"Scrap your boilerplate" --- Generic programming in Haskell See http://www.cs.uu.nl/wiki/GenericProgramming/SYB. The present module contains thirteen Data instances which are considered dubious (either because the types are abstract or just not meant to be traversed). Instances in this module might change or disappear in future releases of this package. (This module does not export anything. It really just defines instances.)
Convenience alias for Data.Generics.Instances.
Instances are provided for the types in the packages:
  • array
  • bytestring
  • case-insensitive
  • containers
  • data-fix
  • OneTuple
  • old-time
  • strict
  • text
  • text-short
  • these
  • time
  • unordered-containers
  • uuid
  • primitive
  • vector
Since all of these instances are provided as orphans, I recommend that you do not use this library within another library module, so that you don't impose these instances on down-stream consumers of your code. For information on writing a test-suite with Cabal see http://www.haskell.org/cabal/users-guide/#test-suites
Re-exports from the `base-orphans` and `transformers-compat` packages.
Re-exports orphan instances for Complex from the base-orphans package.
Backports orphan instances which are not provided by other modules in transformers-compat.
In some cases, Data instances for abstract types are incorrect, and fail to work correctly with Uniplate. This module defines three helper types (Hide, Trigger and Invariant) to assist when writing instances for abstract types. The Hide type is useful when you want to mark some part of your data type as being ignored by Data.Generics.Uniplate.Data (and any other Data based generics libraries, such as syb). Using the helper types, this module defines wrappers for types in the containers package, namely Map, Set, IntMap and IntSet. The standard containers Data instances all treat the types as abstract, but the wrapper types allow you to traverse within the data types, ensuring the necessary invariants are maintained. In particular, if you do not modify the keys reconstruct will be O(n) instead of O(n log n). As an example of how to implement your own abstract type wrappers, the Map data type is defined as:
newtype Map k v = Map (Invariant (Trigger [k], Trigger [v], Hide (Map.Map k v)))
deriving (Data, Typeable)
The Map type is defined as an Invariant of three components - the keys, the values, and the underlying Map. We use Invariant to ensure that the keysvaluesmap always remain in sync. We use Trigger on the keys and values to ensure that whenever the keys or values change we rebuild the Map, but if they don't, we reuse the previous Map. The fromMap function is implemented by pattern matching on the Map type:
fromMap (Map (Invariant _ (_,_,Hide x))) = x
The toMap function is slightly harder, as we need to come up with an invariant restoring function:
toMap :: Ord k => Map.Map k v -> Map k v
toMap x = Map $ Invariant inv $ create x
where
create x = (Trigger False ks, Trigger False vs, Hide x)
where (ks,vs) = unzip $ Map.toAscList x

inv (ks,vs,x)
| trigger ks = create $ Map.fromList $ zip (fromTrigger ks) (fromTrigger vs)
| trigger vs = create $ Map.fromDistinctAscList $ zip (fromTrigger ks) (fromTrigger vs)
| otherwise = (ks,vs,x)
The create function creates a value from a Map, getting the correct keys and values. The inv function looks at the triggers on the keys/values. If the keys trigger has been tripped, then we reconstruct the Map using fromList. If the values trigger has been tripped, but they keys trigger has not, we can use fromDistinctAscList, reducing the complexity of constructing the Map. If nothing has changed we can reuse the previous value. The end result is that all Uniplate (or syb) traversals over Map result in a valid value, which has had all appropriate transformations applied.
Instances for Generic and HasMetadata. We define instances for datatypes from generics-sop and base that are supported. (There are only instances defined in this module, so the documentation is empty.)
Collection of ready-made Convertible instances. See each individual module for more docs: Data.Convertible.Instances.C Data.Convertible.Instances.Map Data.Convertible.Instances.Num Data.Convertible.Instances.Time You can find a list of these instances at Convertible.
Instances of ListLike and related classes. Re-exported by Data.ListLike. Written by John Goerzen, jgoerzen@complete.org
It provides the following instances: More recent versions of template-haskell provide these instances. However, in order to support older versions you should import this module.
This module re-exports orphan instances from Eq module, and (PartialOrd v, Finite k) => PartialOrd (k -> v) instance.
This module defines alternative Random instances for common integral types, which make use of the RandomGen class from System.Random.TF.Gen.
Provides orphan Binary instances for types in various packages:
  • aeson
  • case-insensitive
  • hashable
  • scientific (prior to scientific-0.3.4.0)
  • tagged
  • text (through text-binary, or text >= 1.2.1)
  • time
  • unordered-containers
  • vector (through vector-binary-instances)