packages feed

trivial-constraint 0.5.0.0 → 0.5.1.0

raw patch · 2 files changed

+63/−34 lines, 2 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.Constraint.Trivial: type Impossible t = HiddenEmptyClass t
- Data.Constraint.Trivial: type Impossible2 t s = HiddenEmptyClass2 t s
- Data.Constraint.Trivial: type Impossible3 t s r = HiddenEmptyClass3 t s r
- Data.Constraint.Trivial: type Impossible4 t s r q = HiddenEmptyClass4 t s r q
- Data.Constraint.Trivial: type Impossible5 t s r q p = HiddenEmptyClass5 t s r q p
- Data.Constraint.Trivial: type Impossible6 t s r q p o = HiddenEmptyClass6 t s r q p o
- Data.Constraint.Trivial: type Impossible7 t s r q p o n = HiddenEmptyClass7 t s r q p o n
- Data.Constraint.Trivial: type Impossible8 t s r q p o n m = HiddenEmptyClass8 t s r q p o n m
- Data.Constraint.Trivial: type Impossible9 t s r q p o n m l = HiddenEmptyClass9 t s r q p o n m l
+ Data.Constraint.Trivial: absurdible :: Impossible t => proxy t -> a
+ Data.Constraint.Trivial: absurdible2 :: Impossible2 t s => proxy t -> proxy s -> a
+ Data.Constraint.Trivial: absurdible3 :: Impossible3 t s r => proxy t -> proxy s -> proxy r -> a
+ Data.Constraint.Trivial: absurdible4 :: Impossible4 t s r q => proxy t -> proxy s -> proxy r -> proxy q -> a
+ Data.Constraint.Trivial: absurdible5 :: Impossible5 t s r q p => proxy t -> proxy s -> proxy r -> proxy q -> proxy p -> a
+ Data.Constraint.Trivial: absurdible6 :: Impossible6 t s r q p o => proxy t -> proxy s -> proxy r -> proxy q -> proxy p -> proxy o -> a
+ Data.Constraint.Trivial: absurdible7 :: Impossible7 t s r q p o n => proxy t -> proxy s -> proxy r -> proxy q -> proxy p -> proxy o -> proxy n -> a
+ Data.Constraint.Trivial: absurdible8 :: Impossible8 t s r q p o n m => proxy t -> proxy s -> proxy r -> proxy q -> proxy p -> proxy o -> proxy n -> proxy m -> a
+ Data.Constraint.Trivial: absurdible9 :: Impossible9 t s r q p o n m l => proxy t -> proxy s -> proxy r -> proxy q -> proxy p -> proxy o -> proxy n -> proxy m -> proxy l -> a
+ Data.Constraint.Trivial: class TypeError (Disallowed "Impossible") => Impossible t
+ Data.Constraint.Trivial: class TypeError (Disallowed "Impossible2") => Impossible2 t s
+ Data.Constraint.Trivial: class TypeError (Disallowed "Impossible3") => Impossible3 t s r
+ Data.Constraint.Trivial: class TypeError (Disallowed "Impossible4") => Impossible4 t s r q
+ Data.Constraint.Trivial: class TypeError (Disallowed "Impossible5") => Impossible5 t s r q p
+ Data.Constraint.Trivial: class TypeError (Disallowed "Impossible6") => Impossible6 t s r q p o
+ Data.Constraint.Trivial: class TypeError (Disallowed "Impossible7") => Impossible7 t s r q p o n
+ Data.Constraint.Trivial: class TypeError (Disallowed "Impossible8") => Impossible8 t s r q p o n m
+ Data.Constraint.Trivial: class TypeError (Disallowed "Impossible9") => Impossible9 t s r q p o n m l

Files

src/Data/Constraint/Trivial.hs view
@@ -4,23 +4,33 @@ -- License     :  GPL v3 (see LICENSE) -- Maintainer  :  (@) jsagemue $ uni-koeln.de ---{-# LANGUAGE ConstraintKinds       #-}-{-# LANGUAGE FlexibleInstances     #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PolyKinds             #-}+{-# LANGUAGE ConstraintKinds         #-}+{-# LANGUAGE DataKinds               #-}+{-# LANGUAGE FlexibleInstances       #-}+{-# LANGUAGE MultiParamTypeClasses   #-}+{-# LANGUAGE PolyKinds               #-}+{-# LANGUAGE TypeOperators           #-}+{-# LANGUAGE UndecidableInstances    #-}+{-# LANGUAGE UndecidableSuperClasses #-}  module Data.Constraint.Trivial (-            Unconstrained, Impossible-          , Unconstrained2, Impossible2-          , Unconstrained3, Impossible3-          , Unconstrained4, Impossible4-          , Unconstrained5, Impossible5-          , Unconstrained6, Impossible6-          , Unconstrained7, Impossible7-          , Unconstrained8, Impossible8-          , Unconstrained9, Impossible9+            Unconstrained, Impossible(..)+          , Unconstrained2, Impossible2(..)+          , Unconstrained3, Impossible3(..)+          , Unconstrained4, Impossible4(..)+          , Unconstrained5, Impossible5(..)+          , Unconstrained6, Impossible6(..)+          , Unconstrained7, Impossible7(..)+          , Unconstrained8, Impossible8(..)+          , Unconstrained9, Impossible9(..)           ) where +import           GHC.TypeLits++type Disallowed t = 'Text "All instances of "+              ':<>: 'Text t+              ':<>: 'Text " are disallowed."+ -- | Intended to be used as an argument for some type constructor which expects kind --   @k -> Constraint@, when you do not actually wish to constrain anything with it. --@@ -33,9 +43,16 @@ -- | This constraint can /never/ be fulfilled. Might be useful e.g. as a default --   for a class-associated constraint; this basically disables any method with --   that constraint (so it can safely be left 'undefined').-type Impossible t = HiddenEmptyClass t--class HiddenEmptyClass t+class TypeError (Disallowed "Impossible") => Impossible t where+    -- | Ex falso quodlibet.  If you have @'Impossible' t@, you can do+    -- anything.+    --+    -- Might be useful e.g. if you are inside a function wiht an+    -- @'Impossible' t =>@ constraint, and you want to do something+    -- impossible, like the constraint implies.+    --+    -- Analogous to 'Data.Void.absurd'.+    absurdible :: proxy t -> a   -- | Like 'Unconstrained', but with kind signature @k -> k -> Constraint@@@ -43,54 +60,62 @@ class Unconstrained2 t s instance Unconstrained2 t s -type Impossible2 t s = HiddenEmptyClass2 t s-class HiddenEmptyClass2 t s+class TypeError (Disallowed "Impossible2") => Impossible2 t s where+    absurdible2 :: proxy t -> proxy s -> a   class Unconstrained3 t s r instance Unconstrained3 t s r -type Impossible3 t s r = HiddenEmptyClass3 t s r-class HiddenEmptyClass3 t s r+class TypeError (Disallowed "Impossible3") => Impossible3 t s r where+    absurdible3 :: proxy t -> proxy s -> proxy r -> a   class Unconstrained4 t s r q instance Unconstrained4 t s r q -type Impossible4 t s r q = HiddenEmptyClass4 t s r q-class HiddenEmptyClass4 t s r q+class TypeError (Disallowed "Impossible4") => Impossible4 t s r q where+    absurdible4 :: proxy t -> proxy s -> proxy r -> proxy q -> a   class Unconstrained5 t s r q p instance Unconstrained5 t s r q p -type Impossible5 t s r q p = HiddenEmptyClass5 t s r q p-class HiddenEmptyClass5 t s r q p+class TypeError (Disallowed "Impossible5") => Impossible5 t s r q p where+    absurdible5 :: proxy t -> proxy s -> proxy r -> proxy q -> proxy p -> a   class Unconstrained6 t s r q p o instance Unconstrained6 t s r q p o -type Impossible6 t s r q p o = HiddenEmptyClass6 t s r q p o-class HiddenEmptyClass6 t s r q p o+class TypeError (Disallowed "Impossible6") => Impossible6 t s r q p o where+    absurdible6 :: proxy t -> proxy s -> proxy r+                -> proxy q -> proxy p -> proxy o+                -> a   class Unconstrained7 t s r q p o n instance Unconstrained7 t s r q p o n -type Impossible7 t s r q p o n = HiddenEmptyClass7 t s r q p o n-class HiddenEmptyClass7 t s r q p o n+class TypeError (Disallowed "Impossible7") => Impossible7 t s r q p o n where+    absurdible7 :: proxy t -> proxy s -> proxy r -> proxy q+                -> proxy p -> proxy o -> proxy n -> a   class Unconstrained8 t s r q p o n m instance Unconstrained8 t s r q p o n m -type Impossible8 t s r q p o n m = HiddenEmptyClass8 t s r q p o n m-class HiddenEmptyClass8 t s r q p o n m+class TypeError (Disallowed "Impossible8") => Impossible8 t s r q p o n m where+    absurdible8 :: proxy t -> proxy s -> proxy r -> proxy q+                -> proxy p -> proxy o -> proxy n -> proxy m+                -> a   class Unconstrained9 t s r q p o n m l instance Unconstrained9 t s r q p o n m l -type Impossible9 t s r q p o n m l = HiddenEmptyClass9 t s r q p o n m l-class HiddenEmptyClass9 t s r q p o n m l+class TypeError (Disallowed "Impossible9") => Impossible9 t s r q p o n m l where+    absurdible9 :: proxy t -> proxy s -> proxy r+                -> proxy q -> proxy p -> proxy o+                -> proxy n -> proxy m -> proxy l+                -> a
trivial-constraint.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                trivial-constraint-version:             0.5.0.0+version:             0.5.1.0 synopsis:            Constraints that any type, resp. no type fulfills description:         Since GHC 7.4, constraints are first-class: we have the constraint kind, and thus type-classes have a kind such as @* -> Constraint@.                      .@@ -19,13 +19,17 @@ license:             GPL-3 license-file:        LICENSE author:              Justus Sagemüller-maintainer:          sagemuej@smail.uni-koeln.de+maintainer:          jsag@hvl.no homepage:            https://github.com/leftaroundabout/trivial-constraint -- copyright:            category:            Constraints build-type:          Simple -- extra-source-files:   cabal-version:       >=1.10++source-repository head+  type: git+  location: git://github.com/leftaroundabout/trivial-constraint.git  library   exposed-modules:     Data.Constraint.Trivial