packages feed

ersatz 0.3 → 0.3.1

raw patch · 22 files changed

+165/−52 lines, 22 filesdep ~basedep ~data-defaultdep ~lensnew-uploaderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base, data-default, lens, process, transformers

API changes (from Hackage documentation)

- Ersatz.Bit: instance (GBoolean f, GBoolean g) => GBoolean (f :*: g)
- Ersatz.Bit: instance Boolean Bit
- Ersatz.Bit: instance Boolean Bool
- Ersatz.Bit: instance Boolean a => GBoolean (K1 i a)
- Ersatz.Bit: instance Codec Bit
- Ersatz.Bit: instance GBoolean U1
- Ersatz.Bit: instance GBoolean V1
- Ersatz.Bit: instance GBoolean a => GBoolean (M1 i c a)
- Ersatz.Bit: instance Show Bit
- Ersatz.Bit: instance Typeable Bit
- Ersatz.Bit: instance Variable Bit
- Ersatz.BitChar: instance Codec BitChar
- Ersatz.BitChar: instance Equatable BitChar
- Ersatz.BitChar: instance Orderable BitChar
- Ersatz.BitChar: instance Show BitChar
- Ersatz.BitChar: instance Typeable BitChar
- Ersatz.BitChar: instance Variable BitChar
- Ersatz.Bits: instance [safe] Boolean Bit1
- Ersatz.Bits: instance [safe] Boolean Bit2
- Ersatz.Bits: instance [safe] Boolean Bit3
- Ersatz.Bits: instance [safe] Boolean Bit4
- Ersatz.Bits: instance [safe] Boolean Bit5
- Ersatz.Bits: instance [safe] Boolean Bit6
- Ersatz.Bits: instance [safe] Boolean Bit7
- Ersatz.Bits: instance [safe] Boolean Bit8
- Ersatz.Bits: instance [safe] Codec Bit1
- Ersatz.Bits: instance [safe] Codec Bit2
- Ersatz.Bits: instance [safe] Codec Bit3
- Ersatz.Bits: instance [safe] Codec Bit4
- Ersatz.Bits: instance [safe] Codec Bit5
- Ersatz.Bits: instance [safe] Codec Bit6
- Ersatz.Bits: instance [safe] Codec Bit7
- Ersatz.Bits: instance [safe] Codec Bit8
- Ersatz.Bits: instance [safe] Codec Bits
- Ersatz.Bits: instance [safe] Constructor C1_0Bit1
- Ersatz.Bits: instance [safe] Constructor C1_0Bit2
- Ersatz.Bits: instance [safe] Constructor C1_0Bit3
- Ersatz.Bits: instance [safe] Constructor C1_0Bit4
- Ersatz.Bits: instance [safe] Constructor C1_0Bit5
- Ersatz.Bits: instance [safe] Constructor C1_0Bit6
- Ersatz.Bits: instance [safe] Constructor C1_0Bit7
- Ersatz.Bits: instance [safe] Constructor C1_0Bit8
- Ersatz.Bits: instance [safe] Datatype D1Bit1
- Ersatz.Bits: instance [safe] Datatype D1Bit2
- Ersatz.Bits: instance [safe] Datatype D1Bit3
- Ersatz.Bits: instance [safe] Datatype D1Bit4
- Ersatz.Bits: instance [safe] Datatype D1Bit5
- Ersatz.Bits: instance [safe] Datatype D1Bit6
- Ersatz.Bits: instance [safe] Datatype D1Bit7
- Ersatz.Bits: instance [safe] Datatype D1Bit8
- Ersatz.Bits: instance [safe] Equatable Bit1
- Ersatz.Bits: instance [safe] Equatable Bit2
- Ersatz.Bits: instance [safe] Equatable Bit3
- Ersatz.Bits: instance [safe] Equatable Bit4
- Ersatz.Bits: instance [safe] Equatable Bit5
- Ersatz.Bits: instance [safe] Equatable Bit6
- Ersatz.Bits: instance [safe] Equatable Bit7
- Ersatz.Bits: instance [safe] Equatable Bit8
- Ersatz.Bits: instance [safe] Equatable Bits
- Ersatz.Bits: instance [safe] Generic Bit1
- Ersatz.Bits: instance [safe] Generic Bit2
- Ersatz.Bits: instance [safe] Generic Bit3
- Ersatz.Bits: instance [safe] Generic Bit4
- Ersatz.Bits: instance [safe] Generic Bit5
- Ersatz.Bits: instance [safe] Generic Bit6
- Ersatz.Bits: instance [safe] Generic Bit7
- Ersatz.Bits: instance [safe] Generic Bit8
- Ersatz.Bits: instance [safe] HasBits Bit
- Ersatz.Bits: instance [safe] HasBits Bit1
- Ersatz.Bits: instance [safe] HasBits Bit2
- Ersatz.Bits: instance [safe] HasBits Bit3
- Ersatz.Bits: instance [safe] HasBits Bit4
- Ersatz.Bits: instance [safe] HasBits Bit5
- Ersatz.Bits: instance [safe] HasBits Bit6
- Ersatz.Bits: instance [safe] HasBits Bit7
- Ersatz.Bits: instance [safe] HasBits Bit8
- Ersatz.Bits: instance [safe] HasBits Bits
- Ersatz.Bits: instance [safe] Num Bit1
- Ersatz.Bits: instance [safe] Num Bit2
- Ersatz.Bits: instance [safe] Num Bits
- Ersatz.Bits: instance [safe] Orderable Bit1
- Ersatz.Bits: instance [safe] Orderable Bit2
- Ersatz.Bits: instance [safe] Orderable Bit3
- Ersatz.Bits: instance [safe] Orderable Bit4
- Ersatz.Bits: instance [safe] Orderable Bit5
- Ersatz.Bits: instance [safe] Orderable Bit6
- Ersatz.Bits: instance [safe] Orderable Bit7
- Ersatz.Bits: instance [safe] Orderable Bit8
- Ersatz.Bits: instance [safe] Orderable Bits
- Ersatz.Bits: instance [safe] Show Bit1
- Ersatz.Bits: instance [safe] Show Bit2
- Ersatz.Bits: instance [safe] Show Bit3
- Ersatz.Bits: instance [safe] Show Bit4
- Ersatz.Bits: instance [safe] Show Bit5
- Ersatz.Bits: instance [safe] Show Bit6
- Ersatz.Bits: instance [safe] Show Bit7
- Ersatz.Bits: instance [safe] Show Bit8
- Ersatz.Bits: instance [safe] Show Bits
- Ersatz.Bits: instance [safe] Typeable Bit1
- Ersatz.Bits: instance [safe] Typeable Bit2
- Ersatz.Bits: instance [safe] Typeable Bit3
- Ersatz.Bits: instance [safe] Typeable Bit4
- Ersatz.Bits: instance [safe] Typeable Bit5
- Ersatz.Bits: instance [safe] Typeable Bit6
- Ersatz.Bits: instance [safe] Typeable Bit7
- Ersatz.Bits: instance [safe] Typeable Bit8
- Ersatz.Bits: instance [safe] Typeable Bits
- Ersatz.Bits: instance [safe] Variable Bit1
- Ersatz.Bits: instance [safe] Variable Bit2
- Ersatz.Bits: instance [safe] Variable Bit3
- Ersatz.Bits: instance [safe] Variable Bit4
- Ersatz.Bits: instance [safe] Variable Bit5
- Ersatz.Bits: instance [safe] Variable Bit6
- Ersatz.Bits: instance [safe] Variable Bit7
- Ersatz.Bits: instance [safe] Variable Bit8
- Ersatz.Codec: instance [safe] (Codec a, Codec b) => Codec (Either a b)
- Ersatz.Codec: instance [safe] (Codec a, Codec b) => Codec (a, b)
- Ersatz.Codec: instance [safe] (Codec a, Codec b, Codec c) => Codec (a, b, c)
- Ersatz.Codec: instance [safe] (Codec a, Codec b, Codec c, Codec d) => Codec (a, b, c, d)
- Ersatz.Codec: instance [safe] (Codec a, Codec b, Codec c, Codec d, Codec e) => Codec (a, b, c, d, e)
- Ersatz.Codec: instance [safe] (Codec a, Codec b, Codec c, Codec d, Codec e, Codec f) => Codec (a, b, c, d, e, f)
- Ersatz.Codec: instance [safe] (Codec a, Codec b, Codec c, Codec d, Codec e, Codec f, Codec g) => Codec (a, b, c, d, e, f, g)
- Ersatz.Codec: instance [safe] (Codec a, Codec b, Codec c, Codec d, Codec e, Codec f, Codec g, Codec h) => Codec (a, b, c, d, e, f, g, h)
- Ersatz.Codec: instance [safe] (Ix i, Codec e) => Codec (Array i e)
- Ersatz.Codec: instance [safe] Codec ()
- Ersatz.Codec: instance [safe] Codec Literal
- Ersatz.Codec: instance [safe] Codec a => Codec (HashMap k a)
- Ersatz.Codec: instance [safe] Codec a => Codec (IntMap a)
- Ersatz.Codec: instance [safe] Codec a => Codec (Map k a)
- Ersatz.Codec: instance [safe] Codec a => Codec (Maybe a)
- Ersatz.Codec: instance [safe] Codec a => Codec (Seq a)
- Ersatz.Codec: instance [safe] Codec a => Codec (Tree a)
- Ersatz.Codec: instance [safe] Codec a => Codec [a]
- Ersatz.Equatable: instance [safe] (Eq k, Equatable v) => Equatable (Map k v)
- Ersatz.Equatable: instance [safe] (Equatable a, Equatable b) => Equatable (Either a b)
- Ersatz.Equatable: instance [safe] (Equatable a, Equatable b) => Equatable (a, b)
- Ersatz.Equatable: instance [safe] (Equatable a, Equatable b, Equatable c) => Equatable (a, b, c)
- Ersatz.Equatable: instance [safe] (Equatable a, Equatable b, Equatable c, Equatable d) => Equatable (a, b, c, d)
- Ersatz.Equatable: instance [safe] (Equatable a, Equatable b, Equatable c, Equatable d, Equatable e) => Equatable (a, b, c, d, e)
- Ersatz.Equatable: instance [safe] (Equatable a, Equatable b, Equatable c, Equatable d, Equatable e, Equatable f) => Equatable (a, b, c, d, e, f)
- Ersatz.Equatable: instance [safe] (Equatable a, Equatable b, Equatable c, Equatable d, Equatable e, Equatable f, Equatable g) => Equatable (a, b, c, d, e, f, g)
- Ersatz.Equatable: instance [safe] (GEquatable f, GEquatable g) => GEquatable (f :*: g)
- Ersatz.Equatable: instance [safe] (GEquatable f, GEquatable g) => GEquatable (f :+: g)
- Ersatz.Equatable: instance [safe] Equatable Bit
- Ersatz.Equatable: instance [safe] Equatable a => Equatable (Maybe a)
- Ersatz.Equatable: instance [safe] Equatable a => Equatable [a]
- Ersatz.Equatable: instance [safe] Equatable a => GEquatable (K1 i a)
- Ersatz.Equatable: instance [safe] Equatable v => Equatable (IntMap v)
- Ersatz.Equatable: instance [safe] GEquatable U1
- Ersatz.Equatable: instance [safe] GEquatable V1
- Ersatz.Equatable: instance [safe] GEquatable f => GEquatable (M1 i c f)
- Ersatz.Internal.Formula: clauseSet :: Clause -> IntSet
- Ersatz.Internal.Formula: formulaSet :: Formula -> Set Clause
- Ersatz.Internal.Formula: instance [safe] Eq Clause
- Ersatz.Internal.Formula: instance [safe] Eq Formula
- Ersatz.Internal.Formula: instance [safe] Monoid Clause
- Ersatz.Internal.Formula: instance [safe] Monoid Formula
- Ersatz.Internal.Formula: instance [safe] Ord Clause
- Ersatz.Internal.Formula: instance [safe] Ord Formula
- Ersatz.Internal.Formula: instance [safe] Show Clause
- Ersatz.Internal.Formula: instance [safe] Show Formula
- Ersatz.Internal.Formula: instance [safe] Typeable Clause
- Ersatz.Internal.Formula: instance [safe] Typeable Formula
- Ersatz.Internal.Literal: instance [safe] Eq Literal
- Ersatz.Internal.Literal: instance [safe] Ord Literal
- Ersatz.Internal.Literal: instance [safe] Show Literal
- Ersatz.Internal.Literal: instance [safe] Typeable Literal
- Ersatz.Internal.Literal: literalId :: Literal -> Int
- Ersatz.Orderable: instance [safe] (GOrderable f, GOrderable g) => GOrderable (f :*: g)
- Ersatz.Orderable: instance [safe] (GOrderable f, GOrderable g) => GOrderable (f :+: g)
- Ersatz.Orderable: instance [safe] (Orderable a, Orderable b) => Orderable (Either a b)
- Ersatz.Orderable: instance [safe] (Orderable a, Orderable b) => Orderable (a, b)
- Ersatz.Orderable: instance [safe] (Orderable a, Orderable b, Orderable c) => Orderable (a, b, c)
- Ersatz.Orderable: instance [safe] (Orderable a, Orderable b, Orderable c, Orderable d) => Orderable (a, b, c, d)
- Ersatz.Orderable: instance [safe] (Orderable a, Orderable b, Orderable c, Orderable d, Orderable e) => Orderable (a, b, c, d, e)
- Ersatz.Orderable: instance [safe] (Orderable a, Orderable b, Orderable c, Orderable d, Orderable e, Orderable f) => Orderable (a, b, c, d, e, f)
- Ersatz.Orderable: instance [safe] (Orderable a, Orderable b, Orderable c, Orderable d, Orderable e, Orderable f, Orderable g) => Orderable (a, b, c, d, e, f, g)
- Ersatz.Orderable: instance [safe] GOrderable U1
- Ersatz.Orderable: instance [safe] GOrderable V1
- Ersatz.Orderable: instance [safe] GOrderable f => GOrderable (M1 i c f)
- Ersatz.Orderable: instance [safe] Orderable Bit
- Ersatz.Orderable: instance [safe] Orderable a => GOrderable (K1 i a)
- Ersatz.Orderable: instance [safe] Orderable a => Orderable (Maybe a)
- Ersatz.Orderable: instance [safe] Orderable a => Orderable [a]
- Ersatz.Problem: instance DIMACS SAT
- Ersatz.Problem: instance Default QSAT
- Ersatz.Problem: instance Default SAT
- Ersatz.Problem: instance HasQSAT QSAT
- Ersatz.Problem: instance HasSAT QSAT
- Ersatz.Problem: instance HasSAT SAT
- Ersatz.Problem: instance QDIMACS QSAT
- Ersatz.Problem: instance Show QSAT
- Ersatz.Problem: instance Show SAT
- Ersatz.Problem: instance Typeable QSAT
- Ersatz.Problem: instance Typeable Quant
- Ersatz.Problem: instance Typeable SAT
- Ersatz.Solution: instance [safe] Bounded Result
- Ersatz.Solution: instance [safe] Enum Result
- Ersatz.Solution: instance [safe] Eq Result
- Ersatz.Solution: instance [safe] Ix Result
- Ersatz.Solution: instance [safe] Ord Result
- Ersatz.Solution: instance [safe] Read Result
- Ersatz.Solution: instance [safe] Show Result
- Ersatz.Solution: instance [safe] Typeable Solution
- Ersatz.Solution: solutionLiteral :: Solution -> Literal -> Maybe Bool
- Ersatz.Solution: solutionStableName :: Solution -> StableName () -> Maybe Bool
- Ersatz.Variable: instance (GVariable f, GVariable g) => GVariable (f :*: g)
- Ersatz.Variable: instance (Variable a, Variable b) => Variable (a, b)
- Ersatz.Variable: instance (Variable a, Variable b, Variable c) => Variable (a, b, c)
- Ersatz.Variable: instance (Variable a, Variable b, Variable c, Variable d) => Variable (a, b, c, d)
- Ersatz.Variable: instance (Variable a, Variable b, Variable c, Variable d, Variable e) => Variable (a, b, c, d, e)
- Ersatz.Variable: instance (Variable a, Variable b, Variable c, Variable d, Variable e, Variable f) => Variable (a, b, c, d, e, f)
- Ersatz.Variable: instance (Variable a, Variable b, Variable c, Variable d, Variable e, Variable f, Variable g) => Variable (a, b, c, d, e, f, g)
- Ersatz.Variable: instance GVariable U1
- Ersatz.Variable: instance GVariable f => GVariable (M1 i c f)
- Ersatz.Variable: instance Variable Literal
- Ersatz.Variable: instance Variable a => GVariable (K1 i a)
+ Ersatz.Bit: instance (Ersatz.Bit.GBoolean f, Ersatz.Bit.GBoolean g) => Ersatz.Bit.GBoolean (f GHC.Generics.:*: g)
+ Ersatz.Bit: instance Ersatz.Bit.Boolean Ersatz.Bit.Bit
+ Ersatz.Bit: instance Ersatz.Bit.Boolean GHC.Types.Bool
+ Ersatz.Bit: instance Ersatz.Bit.Boolean a => Ersatz.Bit.GBoolean (GHC.Generics.K1 i a)
+ Ersatz.Bit: instance Ersatz.Bit.GBoolean GHC.Generics.U1
+ Ersatz.Bit: instance Ersatz.Bit.GBoolean GHC.Generics.V1
+ Ersatz.Bit: instance Ersatz.Bit.GBoolean a => Ersatz.Bit.GBoolean (GHC.Generics.M1 i c a)
+ Ersatz.Bit: instance Ersatz.Codec.Codec Ersatz.Bit.Bit
+ Ersatz.Bit: instance Ersatz.Variable.Variable Ersatz.Bit.Bit
+ Ersatz.Bit: instance GHC.Show.Show Ersatz.Bit.Bit
+ Ersatz.BitChar: instance Ersatz.Codec.Codec Ersatz.BitChar.BitChar
+ Ersatz.BitChar: instance Ersatz.Equatable.Equatable Ersatz.BitChar.BitChar
+ Ersatz.BitChar: instance Ersatz.Orderable.Orderable Ersatz.BitChar.BitChar
+ Ersatz.BitChar: instance Ersatz.Variable.Variable Ersatz.BitChar.BitChar
+ Ersatz.BitChar: instance GHC.Show.Show Ersatz.BitChar.BitChar
+ Ersatz.Bits: instance Ersatz.Bit.Boolean Ersatz.Bits.Bit1
+ Ersatz.Bits: instance Ersatz.Bit.Boolean Ersatz.Bits.Bit2
+ Ersatz.Bits: instance Ersatz.Bit.Boolean Ersatz.Bits.Bit3
+ Ersatz.Bits: instance Ersatz.Bit.Boolean Ersatz.Bits.Bit4
+ Ersatz.Bits: instance Ersatz.Bit.Boolean Ersatz.Bits.Bit5
+ Ersatz.Bits: instance Ersatz.Bit.Boolean Ersatz.Bits.Bit6
+ Ersatz.Bits: instance Ersatz.Bit.Boolean Ersatz.Bits.Bit7
+ Ersatz.Bits: instance Ersatz.Bit.Boolean Ersatz.Bits.Bit8
+ Ersatz.Bits: instance Ersatz.Bits.HasBits Ersatz.Bit.Bit
+ Ersatz.Bits: instance Ersatz.Bits.HasBits Ersatz.Bits.Bit1
+ Ersatz.Bits: instance Ersatz.Bits.HasBits Ersatz.Bits.Bit2
+ Ersatz.Bits: instance Ersatz.Bits.HasBits Ersatz.Bits.Bit3
+ Ersatz.Bits: instance Ersatz.Bits.HasBits Ersatz.Bits.Bit4
+ Ersatz.Bits: instance Ersatz.Bits.HasBits Ersatz.Bits.Bit5
+ Ersatz.Bits: instance Ersatz.Bits.HasBits Ersatz.Bits.Bit6
+ Ersatz.Bits: instance Ersatz.Bits.HasBits Ersatz.Bits.Bit7
+ Ersatz.Bits: instance Ersatz.Bits.HasBits Ersatz.Bits.Bit8
+ Ersatz.Bits: instance Ersatz.Bits.HasBits Ersatz.Bits.Bits
+ Ersatz.Bits: instance Ersatz.Codec.Codec Ersatz.Bits.Bit1
+ Ersatz.Bits: instance Ersatz.Codec.Codec Ersatz.Bits.Bit2
+ Ersatz.Bits: instance Ersatz.Codec.Codec Ersatz.Bits.Bit3
+ Ersatz.Bits: instance Ersatz.Codec.Codec Ersatz.Bits.Bit4
+ Ersatz.Bits: instance Ersatz.Codec.Codec Ersatz.Bits.Bit5
+ Ersatz.Bits: instance Ersatz.Codec.Codec Ersatz.Bits.Bit6
+ Ersatz.Bits: instance Ersatz.Codec.Codec Ersatz.Bits.Bit7
+ Ersatz.Bits: instance Ersatz.Codec.Codec Ersatz.Bits.Bit8
+ Ersatz.Bits: instance Ersatz.Codec.Codec Ersatz.Bits.Bits
+ Ersatz.Bits: instance Ersatz.Equatable.Equatable Ersatz.Bits.Bit1
+ Ersatz.Bits: instance Ersatz.Equatable.Equatable Ersatz.Bits.Bit2
+ Ersatz.Bits: instance Ersatz.Equatable.Equatable Ersatz.Bits.Bit3
+ Ersatz.Bits: instance Ersatz.Equatable.Equatable Ersatz.Bits.Bit4
+ Ersatz.Bits: instance Ersatz.Equatable.Equatable Ersatz.Bits.Bit5
+ Ersatz.Bits: instance Ersatz.Equatable.Equatable Ersatz.Bits.Bit6
+ Ersatz.Bits: instance Ersatz.Equatable.Equatable Ersatz.Bits.Bit7
+ Ersatz.Bits: instance Ersatz.Equatable.Equatable Ersatz.Bits.Bit8
+ Ersatz.Bits: instance Ersatz.Equatable.Equatable Ersatz.Bits.Bits
+ Ersatz.Bits: instance Ersatz.Orderable.Orderable Ersatz.Bits.Bit1
+ Ersatz.Bits: instance Ersatz.Orderable.Orderable Ersatz.Bits.Bit2
+ Ersatz.Bits: instance Ersatz.Orderable.Orderable Ersatz.Bits.Bit3
+ Ersatz.Bits: instance Ersatz.Orderable.Orderable Ersatz.Bits.Bit4
+ Ersatz.Bits: instance Ersatz.Orderable.Orderable Ersatz.Bits.Bit5
+ Ersatz.Bits: instance Ersatz.Orderable.Orderable Ersatz.Bits.Bit6
+ Ersatz.Bits: instance Ersatz.Orderable.Orderable Ersatz.Bits.Bit7
+ Ersatz.Bits: instance Ersatz.Orderable.Orderable Ersatz.Bits.Bit8
+ Ersatz.Bits: instance Ersatz.Orderable.Orderable Ersatz.Bits.Bits
+ Ersatz.Bits: instance Ersatz.Variable.Variable Ersatz.Bits.Bit1
+ Ersatz.Bits: instance Ersatz.Variable.Variable Ersatz.Bits.Bit2
+ Ersatz.Bits: instance Ersatz.Variable.Variable Ersatz.Bits.Bit3
+ Ersatz.Bits: instance Ersatz.Variable.Variable Ersatz.Bits.Bit4
+ Ersatz.Bits: instance Ersatz.Variable.Variable Ersatz.Bits.Bit5
+ Ersatz.Bits: instance Ersatz.Variable.Variable Ersatz.Bits.Bit6
+ Ersatz.Bits: instance Ersatz.Variable.Variable Ersatz.Bits.Bit7
+ Ersatz.Bits: instance Ersatz.Variable.Variable Ersatz.Bits.Bit8
+ Ersatz.Bits: instance GHC.Generics.Generic Ersatz.Bits.Bit1
+ Ersatz.Bits: instance GHC.Generics.Generic Ersatz.Bits.Bit2
+ Ersatz.Bits: instance GHC.Generics.Generic Ersatz.Bits.Bit3
+ Ersatz.Bits: instance GHC.Generics.Generic Ersatz.Bits.Bit4
+ Ersatz.Bits: instance GHC.Generics.Generic Ersatz.Bits.Bit5
+ Ersatz.Bits: instance GHC.Generics.Generic Ersatz.Bits.Bit6
+ Ersatz.Bits: instance GHC.Generics.Generic Ersatz.Bits.Bit7
+ Ersatz.Bits: instance GHC.Generics.Generic Ersatz.Bits.Bit8
+ Ersatz.Bits: instance GHC.Num.Num Ersatz.Bits.Bit1
+ Ersatz.Bits: instance GHC.Num.Num Ersatz.Bits.Bit2
+ Ersatz.Bits: instance GHC.Num.Num Ersatz.Bits.Bits
+ Ersatz.Bits: instance GHC.Show.Show Ersatz.Bits.Bit1
+ Ersatz.Bits: instance GHC.Show.Show Ersatz.Bits.Bit2
+ Ersatz.Bits: instance GHC.Show.Show Ersatz.Bits.Bit3
+ Ersatz.Bits: instance GHC.Show.Show Ersatz.Bits.Bit4
+ Ersatz.Bits: instance GHC.Show.Show Ersatz.Bits.Bit5
+ Ersatz.Bits: instance GHC.Show.Show Ersatz.Bits.Bit6
+ Ersatz.Bits: instance GHC.Show.Show Ersatz.Bits.Bit7
+ Ersatz.Bits: instance GHC.Show.Show Ersatz.Bits.Bit8
+ Ersatz.Bits: instance GHC.Show.Show Ersatz.Bits.Bits
+ Ersatz.Codec: instance (Ersatz.Codec.Codec a, Ersatz.Codec.Codec b) => Ersatz.Codec.Codec (Data.Either.Either a b)
+ Ersatz.Codec: instance (Ersatz.Codec.Codec a, Ersatz.Codec.Codec b) => Ersatz.Codec.Codec (a, b)
+ Ersatz.Codec: instance (Ersatz.Codec.Codec a, Ersatz.Codec.Codec b, Ersatz.Codec.Codec c) => Ersatz.Codec.Codec (a, b, c)
+ Ersatz.Codec: instance (Ersatz.Codec.Codec a, Ersatz.Codec.Codec b, Ersatz.Codec.Codec c, Ersatz.Codec.Codec d) => Ersatz.Codec.Codec (a, b, c, d)
+ Ersatz.Codec: instance (Ersatz.Codec.Codec a, Ersatz.Codec.Codec b, Ersatz.Codec.Codec c, Ersatz.Codec.Codec d, Ersatz.Codec.Codec e) => Ersatz.Codec.Codec (a, b, c, d, e)
+ Ersatz.Codec: instance (Ersatz.Codec.Codec a, Ersatz.Codec.Codec b, Ersatz.Codec.Codec c, Ersatz.Codec.Codec d, Ersatz.Codec.Codec e, Ersatz.Codec.Codec f) => Ersatz.Codec.Codec (a, b, c, d, e, f)
+ Ersatz.Codec: instance (Ersatz.Codec.Codec a, Ersatz.Codec.Codec b, Ersatz.Codec.Codec c, Ersatz.Codec.Codec d, Ersatz.Codec.Codec e, Ersatz.Codec.Codec f, Ersatz.Codec.Codec g) => Ersatz.Codec.Codec (a, b, c, d, e, f, g)
+ Ersatz.Codec: instance (Ersatz.Codec.Codec a, Ersatz.Codec.Codec b, Ersatz.Codec.Codec c, Ersatz.Codec.Codec d, Ersatz.Codec.Codec e, Ersatz.Codec.Codec f, Ersatz.Codec.Codec g, Ersatz.Codec.Codec h) => Ersatz.Codec.Codec (a, b, c, d, e, f, g, h)
+ Ersatz.Codec: instance (GHC.Arr.Ix i, Ersatz.Codec.Codec e) => Ersatz.Codec.Codec (GHC.Arr.Array i e)
+ Ersatz.Codec: instance Ersatz.Codec.Codec ()
+ Ersatz.Codec: instance Ersatz.Codec.Codec Ersatz.Internal.Literal.Literal
+ Ersatz.Codec: instance Ersatz.Codec.Codec a => Ersatz.Codec.Codec (Data.HashMap.Base.HashMap k a)
+ Ersatz.Codec: instance Ersatz.Codec.Codec a => Ersatz.Codec.Codec (Data.IntMap.Base.IntMap a)
+ Ersatz.Codec: instance Ersatz.Codec.Codec a => Ersatz.Codec.Codec (Data.Map.Base.Map k a)
+ Ersatz.Codec: instance Ersatz.Codec.Codec a => Ersatz.Codec.Codec (Data.Sequence.Seq a)
+ Ersatz.Codec: instance Ersatz.Codec.Codec a => Ersatz.Codec.Codec (Data.Tree.Tree a)
+ Ersatz.Codec: instance Ersatz.Codec.Codec a => Ersatz.Codec.Codec (GHC.Base.Maybe a)
+ Ersatz.Codec: instance Ersatz.Codec.Codec a => Ersatz.Codec.Codec [a]
+ Ersatz.Codec: type family Decoded a :: *;
+ Ersatz.Codec: }
+ Ersatz.Equatable: instance (Ersatz.Equatable.Equatable a, Ersatz.Equatable.Equatable b) => Ersatz.Equatable.Equatable (Data.Either.Either a b)
+ Ersatz.Equatable: instance (Ersatz.Equatable.Equatable a, Ersatz.Equatable.Equatable b) => Ersatz.Equatable.Equatable (a, b)
+ Ersatz.Equatable: instance (Ersatz.Equatable.Equatable a, Ersatz.Equatable.Equatable b, Ersatz.Equatable.Equatable c) => Ersatz.Equatable.Equatable (a, b, c)
+ Ersatz.Equatable: instance (Ersatz.Equatable.Equatable a, Ersatz.Equatable.Equatable b, Ersatz.Equatable.Equatable c, Ersatz.Equatable.Equatable d) => Ersatz.Equatable.Equatable (a, b, c, d)
+ Ersatz.Equatable: instance (Ersatz.Equatable.Equatable a, Ersatz.Equatable.Equatable b, Ersatz.Equatable.Equatable c, Ersatz.Equatable.Equatable d, Ersatz.Equatable.Equatable e) => Ersatz.Equatable.Equatable (a, b, c, d, e)
+ Ersatz.Equatable: instance (Ersatz.Equatable.Equatable a, Ersatz.Equatable.Equatable b, Ersatz.Equatable.Equatable c, Ersatz.Equatable.Equatable d, Ersatz.Equatable.Equatable e, Ersatz.Equatable.Equatable f) => Ersatz.Equatable.Equatable (a, b, c, d, e, f)
+ Ersatz.Equatable: instance (Ersatz.Equatable.Equatable a, Ersatz.Equatable.Equatable b, Ersatz.Equatable.Equatable c, Ersatz.Equatable.Equatable d, Ersatz.Equatable.Equatable e, Ersatz.Equatable.Equatable f, Ersatz.Equatable.Equatable g) => Ersatz.Equatable.Equatable (a, b, c, d, e, f, g)
+ Ersatz.Equatable: instance (Ersatz.Equatable.GEquatable f, Ersatz.Equatable.GEquatable g) => Ersatz.Equatable.GEquatable (f GHC.Generics.:*: g)
+ Ersatz.Equatable: instance (Ersatz.Equatable.GEquatable f, Ersatz.Equatable.GEquatable g) => Ersatz.Equatable.GEquatable (f GHC.Generics.:+: g)
+ Ersatz.Equatable: instance (GHC.Classes.Eq k, Ersatz.Equatable.Equatable v) => Ersatz.Equatable.Equatable (Data.Map.Base.Map k v)
+ Ersatz.Equatable: instance Ersatz.Equatable.Equatable Ersatz.Bit.Bit
+ Ersatz.Equatable: instance Ersatz.Equatable.Equatable a => Ersatz.Equatable.Equatable (GHC.Base.Maybe a)
+ Ersatz.Equatable: instance Ersatz.Equatable.Equatable a => Ersatz.Equatable.Equatable [a]
+ Ersatz.Equatable: instance Ersatz.Equatable.Equatable a => Ersatz.Equatable.GEquatable (GHC.Generics.K1 i a)
+ Ersatz.Equatable: instance Ersatz.Equatable.Equatable v => Ersatz.Equatable.Equatable (Data.IntMap.Base.IntMap v)
+ Ersatz.Equatable: instance Ersatz.Equatable.GEquatable GHC.Generics.U1
+ Ersatz.Equatable: instance Ersatz.Equatable.GEquatable GHC.Generics.V1
+ Ersatz.Equatable: instance Ersatz.Equatable.GEquatable f => Ersatz.Equatable.GEquatable (GHC.Generics.M1 i c f)
+ Ersatz.Internal.Formula: [clauseSet] :: Clause -> IntSet
+ Ersatz.Internal.Formula: [formulaSet] :: Formula -> Set Clause
+ Ersatz.Internal.Formula: instance GHC.Base.Monoid Ersatz.Internal.Formula.Clause
+ Ersatz.Internal.Formula: instance GHC.Base.Monoid Ersatz.Internal.Formula.Formula
+ Ersatz.Internal.Formula: instance GHC.Classes.Eq Ersatz.Internal.Formula.Clause
+ Ersatz.Internal.Formula: instance GHC.Classes.Eq Ersatz.Internal.Formula.Formula
+ Ersatz.Internal.Formula: instance GHC.Classes.Ord Ersatz.Internal.Formula.Clause
+ Ersatz.Internal.Formula: instance GHC.Classes.Ord Ersatz.Internal.Formula.Formula
+ Ersatz.Internal.Formula: instance GHC.Show.Show Ersatz.Internal.Formula.Clause
+ Ersatz.Internal.Formula: instance GHC.Show.Show Ersatz.Internal.Formula.Formula
+ Ersatz.Internal.Literal: [literalId] :: Literal -> Int
+ Ersatz.Internal.Literal: instance GHC.Classes.Eq Ersatz.Internal.Literal.Literal
+ Ersatz.Internal.Literal: instance GHC.Classes.Ord Ersatz.Internal.Literal.Literal
+ Ersatz.Internal.Literal: instance GHC.Show.Show Ersatz.Internal.Literal.Literal
+ Ersatz.Orderable: instance (Ersatz.Orderable.GOrderable f, Ersatz.Orderable.GOrderable g) => Ersatz.Orderable.GOrderable (f GHC.Generics.:*: g)
+ Ersatz.Orderable: instance (Ersatz.Orderable.GOrderable f, Ersatz.Orderable.GOrderable g) => Ersatz.Orderable.GOrderable (f GHC.Generics.:+: g)
+ Ersatz.Orderable: instance (Ersatz.Orderable.Orderable a, Ersatz.Orderable.Orderable b) => Ersatz.Orderable.Orderable (Data.Either.Either a b)
+ Ersatz.Orderable: instance (Ersatz.Orderable.Orderable a, Ersatz.Orderable.Orderable b) => Ersatz.Orderable.Orderable (a, b)
+ Ersatz.Orderable: instance (Ersatz.Orderable.Orderable a, Ersatz.Orderable.Orderable b, Ersatz.Orderable.Orderable c) => Ersatz.Orderable.Orderable (a, b, c)
+ Ersatz.Orderable: instance (Ersatz.Orderable.Orderable a, Ersatz.Orderable.Orderable b, Ersatz.Orderable.Orderable c, Ersatz.Orderable.Orderable d) => Ersatz.Orderable.Orderable (a, b, c, d)
+ Ersatz.Orderable: instance (Ersatz.Orderable.Orderable a, Ersatz.Orderable.Orderable b, Ersatz.Orderable.Orderable c, Ersatz.Orderable.Orderable d, Ersatz.Orderable.Orderable e) => Ersatz.Orderable.Orderable (a, b, c, d, e)
+ Ersatz.Orderable: instance (Ersatz.Orderable.Orderable a, Ersatz.Orderable.Orderable b, Ersatz.Orderable.Orderable c, Ersatz.Orderable.Orderable d, Ersatz.Orderable.Orderable e, Ersatz.Orderable.Orderable f) => Ersatz.Orderable.Orderable (a, b, c, d, e, f)
+ Ersatz.Orderable: instance (Ersatz.Orderable.Orderable a, Ersatz.Orderable.Orderable b, Ersatz.Orderable.Orderable c, Ersatz.Orderable.Orderable d, Ersatz.Orderable.Orderable e, Ersatz.Orderable.Orderable f, Ersatz.Orderable.Orderable g) => Ersatz.Orderable.Orderable (a, b, c, d, e, f, g)
+ Ersatz.Orderable: instance Ersatz.Orderable.GOrderable GHC.Generics.U1
+ Ersatz.Orderable: instance Ersatz.Orderable.GOrderable GHC.Generics.V1
+ Ersatz.Orderable: instance Ersatz.Orderable.GOrderable f => Ersatz.Orderable.GOrderable (GHC.Generics.M1 i c f)
+ Ersatz.Orderable: instance Ersatz.Orderable.Orderable Ersatz.Bit.Bit
+ Ersatz.Orderable: instance Ersatz.Orderable.Orderable a => Ersatz.Orderable.GOrderable (GHC.Generics.K1 i a)
+ Ersatz.Orderable: instance Ersatz.Orderable.Orderable a => Ersatz.Orderable.Orderable (GHC.Base.Maybe a)
+ Ersatz.Orderable: instance Ersatz.Orderable.Orderable a => Ersatz.Orderable.Orderable [a]
+ Ersatz.Problem: instance Data.Default.Class.Default Ersatz.Problem.QSAT
+ Ersatz.Problem: instance Data.Default.Class.Default Ersatz.Problem.SAT
+ Ersatz.Problem: instance Ersatz.Problem.DIMACS Ersatz.Problem.SAT
+ Ersatz.Problem: instance Ersatz.Problem.HasQSAT Ersatz.Problem.QSAT
+ Ersatz.Problem: instance Ersatz.Problem.HasSAT Ersatz.Problem.QSAT
+ Ersatz.Problem: instance Ersatz.Problem.HasSAT Ersatz.Problem.SAT
+ Ersatz.Problem: instance Ersatz.Problem.QDIMACS Ersatz.Problem.QSAT
+ Ersatz.Problem: instance GHC.Show.Show Ersatz.Problem.QSAT
+ Ersatz.Problem: instance GHC.Show.Show Ersatz.Problem.SAT
+ Ersatz.Solution: [solutionLiteral] :: Solution -> Literal -> Maybe Bool
+ Ersatz.Solution: [solutionStableName] :: Solution -> StableName () -> Maybe Bool
+ Ersatz.Solution: instance GHC.Arr.Ix Ersatz.Solution.Result
+ Ersatz.Solution: instance GHC.Classes.Eq Ersatz.Solution.Result
+ Ersatz.Solution: instance GHC.Classes.Ord Ersatz.Solution.Result
+ Ersatz.Solution: instance GHC.Enum.Bounded Ersatz.Solution.Result
+ Ersatz.Solution: instance GHC.Enum.Enum Ersatz.Solution.Result
+ Ersatz.Solution: instance GHC.Read.Read Ersatz.Solution.Result
+ Ersatz.Solution: instance GHC.Show.Show Ersatz.Solution.Result
+ Ersatz.Solver.Z3: z3 :: MonadIO m => Solver SAT m
+ Ersatz.Solver.Z3: z3Path :: MonadIO m => FilePath -> Solver SAT m
+ Ersatz.Variable: instance (Ersatz.Variable.GVariable f, Ersatz.Variable.GVariable g) => Ersatz.Variable.GVariable (f GHC.Generics.:*: g)
+ Ersatz.Variable: instance (Ersatz.Variable.Variable a, Ersatz.Variable.Variable b) => Ersatz.Variable.Variable (a, b)
+ Ersatz.Variable: instance (Ersatz.Variable.Variable a, Ersatz.Variable.Variable b, Ersatz.Variable.Variable c) => Ersatz.Variable.Variable (a, b, c)
+ Ersatz.Variable: instance (Ersatz.Variable.Variable a, Ersatz.Variable.Variable b, Ersatz.Variable.Variable c, Ersatz.Variable.Variable d) => Ersatz.Variable.Variable (a, b, c, d)
+ Ersatz.Variable: instance (Ersatz.Variable.Variable a, Ersatz.Variable.Variable b, Ersatz.Variable.Variable c, Ersatz.Variable.Variable d, Ersatz.Variable.Variable e) => Ersatz.Variable.Variable (a, b, c, d, e)
+ Ersatz.Variable: instance (Ersatz.Variable.Variable a, Ersatz.Variable.Variable b, Ersatz.Variable.Variable c, Ersatz.Variable.Variable d, Ersatz.Variable.Variable e, Ersatz.Variable.Variable f) => Ersatz.Variable.Variable (a, b, c, d, e, f)
+ Ersatz.Variable: instance (Ersatz.Variable.Variable a, Ersatz.Variable.Variable b, Ersatz.Variable.Variable c, Ersatz.Variable.Variable d, Ersatz.Variable.Variable e, Ersatz.Variable.Variable f, Ersatz.Variable.Variable g) => Ersatz.Variable.Variable (a, b, c, d, e, f, g)
+ Ersatz.Variable: instance Ersatz.Variable.GVariable GHC.Generics.U1
+ Ersatz.Variable: instance Ersatz.Variable.GVariable f => Ersatz.Variable.GVariable (GHC.Generics.M1 i c f)
+ Ersatz.Variable: instance Ersatz.Variable.Variable Ersatz.Internal.Literal.Literal
+ Ersatz.Variable: instance Ersatz.Variable.Variable a => Ersatz.Variable.GVariable (GHC.Generics.K1 i a)
- Ersatz.Bit: (&&) :: Boolean b => b -> b -> b
+ Ersatz.Bit: (&&) :: (Boolean b, Generic b, GBoolean (Rep b)) => b -> b -> b
- Ersatz.Bit: (||) :: Boolean b => b -> b -> b
+ Ersatz.Bit: (||) :: (Boolean b, Generic b, GBoolean (Rep b)) => b -> b -> b
- Ersatz.Bit: all :: (Boolean b, Foldable t, Boolean b) => (a -> b) -> t a -> b
+ Ersatz.Bit: all :: (Boolean b, Foldable t, Generic b, GBoolean (Rep b)) => (a -> b) -> t a -> b
- Ersatz.Bit: any :: (Boolean b, Foldable t, Boolean b) => (a -> b) -> t a -> b
+ Ersatz.Bit: any :: (Boolean b, Foldable t, Generic b, GBoolean (Rep b)) => (a -> b) -> t a -> b
- Ersatz.Bit: bool :: Boolean b => Bool -> b
+ Ersatz.Bit: bool :: (Boolean b, Generic b, GBoolean (Rep b)) => Bool -> b
- Ersatz.Bit: not :: Boolean b => b -> b
+ Ersatz.Bit: not :: (Boolean b, Generic b, GBoolean (Rep b)) => b -> b
- Ersatz.Bit: xor :: Boolean b => b -> b -> b
+ Ersatz.Bit: xor :: (Boolean b, Generic b, GBoolean (Rep b)) => b -> b -> b
- Ersatz.Codec: class Codec a where type family Decoded a :: *
+ Ersatz.Codec: class Codec a where type Decoded a :: * where {
- Ersatz.Codec: decode :: (Codec a, Alternative f, MonadPlus f) => Solution -> a -> f (Decoded a)
+ Ersatz.Codec: decode :: (Codec a, MonadPlus f) => Solution -> a -> f (Decoded a)
- Ersatz.Equatable: (===) :: Equatable t => t -> t -> Bit
+ Ersatz.Equatable: (===) :: (Equatable t, Generic t, GEquatable (Rep t)) => t -> t -> Bit
- Ersatz.Orderable: (<?) :: Orderable t => t -> t -> Bit
+ Ersatz.Orderable: (<?) :: (Orderable t, Generic t, GOrderable (Rep t)) => t -> t -> Bit
- Ersatz.Solver: solveWith :: (Monad m, Alternative n, MonadPlus n, HasSAT s, Default s, Codec a) => Solver s m -> StateT s m a -> m (Result, n (Decoded a))
+ Ersatz.Solver: solveWith :: (Monad m, MonadPlus n, HasSAT s, Default s, Codec a) => Solver s m -> StateT s m a -> m (Result, n (Decoded a))
- Ersatz.Variable: literally :: (Variable t, HasSAT s, MonadState s m) => m Literal -> m t
+ Ersatz.Variable: literally :: (Variable t, HasSAT s, MonadState s m, Generic t, GVariable (Rep t)) => m Literal -> m t

Files

.travis.yml view
@@ -1,36 +1,39 @@-language: haskell-env:-  - GHCVER=7.8.3+language: c+sudo: false -before_install:-  - |-    if [ $GHCVER = `ghc --numeric-version` ]; then-      # Try installing some of the build-deps with apt-get for speed.-      travis/cabal-apt-install --enable-tests $MODE-      export CABAL=cabal-    else-      # Install the GHC we want from hvr's PPA-      travis_retry sudo add-apt-repository -y ppa:hvr/ghc-      travis_retry sudo apt-get update-      travis_retry sudo apt-get install cabal-install-1.18 ghc-$GHCVER happy-      export CABAL=cabal-1.18-      export PATH=/opt/ghc/$GHCVER/bin:$PATH-    fi+matrix:+  include:+    - env: CABALVER=1.18 GHCVER=7.8.4 GHCOPTS="-Werror" JOPTS="-j2"+      addons: {apt: {packages: [cabal-install-1.18, ghc-7.8.4], sources: [hvr-ghc]}}+    - env: CABALVER=1.22 GHCVER=7.10.1 GHCOPTS="" JOPTS="-j2"+      addons: {apt: {packages: [cabal-install-1.22, ghc-7.10.1],sources: [hvr-ghc]}}+    - env: CABALVER=head GHCVER=head GHCOPTS="" JOPTS="-j2"+      addons: {apt: {packages: [cabal-install-head,ghc-head],  sources: [hvr-ghc]}} -  # Uncomment whenever hackage is down.-  # - mkdir -p ~/.cabal && cp travis/config ~/.cabal/config && cabal update-  - cabal update+  allow_failures:+   - env: CABALVER=head GHCVER=head GHCOPTS="" JOPTS="-j2" -  # Try installing some of the build-deps with apt-get for speed.-  - travis/cabal-apt-install $mode-  - export PATH=~/.cabal/bin:$PATH+before_install:+ - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+ - export CABAL=cabal-$CABALVER+ - $CABAL --version+ - travis_retry $CABAL update  install:-  - cabal configure -flib-Werror $mode-  - cabal build+ - |    +   if [ $GHCVER = "head" ] || [ $GHCVER = "7.8.4" ] || [ $GHCVER = "7.10.1" ]; then+     $CABAL install --constraint=transformers\ installed happy alex+     export PATH=$HOME/.cabal/bin:$PATH+   fi+ - $CABAL install $JOPTS --enable-tests --only-dependencies --force  script:-  - $script+ - $CABAL configure -v2 --enable-tests+ - $CABAL build $JOPTS --ghc-options=$GHCOPTS+ - |+   if [ $GHCVER != "head" ]; then+     $CABAL test+   fi  notifications:   irc:@@ -38,7 +41,4 @@       - "irc.freenode.org#haskell-lens"     skip_join: true     template:-      - "\x0313ersatz\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"--env:-  - mode="--enable-tests" script="cabal test --show-details=always"+      - "\x0313ersatz\x0f/\x0306%{branch}\x0f \x0314%{commit}\x0f %{message} \x0302\x1f%{build_url}\x0f"
CHANGELOG.md view
@@ -1,3 +1,7 @@+0.3.1+-----+* Removed the explicit `Safe` annotations. They can't be maintained by mere mortals. Patches to mark packages upstream as `Trustworthy` will be accepted as needed.+ 0.3 ----- * Unified `Encoding` and `Decoding` into `Codec`
ersatz.cabal view
@@ -1,5 +1,5 @@ name:           ersatz-version:        0.3+version:        0.3.1 license:        BSD3 license-file:   LICENSE author:         Edward A. Kmett, Eric Mertens, Johan Kiviniemi@@ -75,7 +75,7 @@  build-type:     Custom cabal-version:  >= 1.10-tested-with:    GHC == 7.4.1, GHC == 7.6.2, GHC == 7.8.2+tested-with:    GHC == 7.8.3, GHC == 7.10.1 extra-source-files:   .ghci   .gitignore@@ -169,15 +169,15 @@    build-depends:     array                >= 0.2      && < 0.6,-    base                 >= 4        && < 5,+    base                 >= 4.7      && < 5,     bytestring           >= 0.10.4.0 && < 0.12,     containers           >= 0.2.0.1  && < 0.6,-    data-default         >= 0.5      && < 0.6,+    data-default         >= 0.5      && < 0.8,     lens                 >= 3.8      && < 5,     mtl                  >= 1.1      && < 2.3,-    process              >= 1.1      && < 1.3,+    process              >= 1.1      && < 1.5,     temporary            >= 1.1      && < 1.3,-    transformers         >= 0.3      && < 0.5,+    transformers         >= 0.3      && < 0.6,     unordered-containers == 0.2.*    if impl(ghc >= 7.4 && < 7.6)@@ -198,6 +198,7 @@     Ersatz.Solver     Ersatz.Solver.DepQBF     Ersatz.Solver.Minisat+    Ersatz.Solver.Z3     Ersatz.Variable    other-modules:@@ -280,8 +281,6 @@     doctest >= 0.9.1,     filepath   ghc-options: -Wall -threaded-  if impl(ghc<7.6.1)-    ghc-options: -Werror   hs-source-dirs: tests  test-suite hlint
examples/regexp-grid/Main.hs view
@@ -11,7 +11,7 @@  main :: IO () main = do-  (res, msol) <- solveWith cryptominisat problem+  (res, msol) <- solveWith minisat problem   when (res /= Satisfied) (fail (show res))   case msol of     Nothing  -> fail "Sol was Nothing"
examples/regexp-grid/RegexpGrid/Regexp.hs view
@@ -1,8 +1,11 @@+{-# LANGUAGE CPP #-} -- | A parser for a subset of the regular expression syntax.  module RegexpGrid.Regexp (Regexp (..), parseRegexp) where +#if __GLASGOW_HASKELL__ < 710 import Control.Applicative hiding ((<|>), many)+#endif import Control.Monad import Data.Char import Text.Parsec
examples/regexp-grid/RegexpGrid/Types.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveDataTypeable #-}@@ -7,7 +8,9 @@ , Field (..) ) where +#if __GLASGOW_HASKELL__ < 710 import Control.Applicative+#endif import Data.Char (chr, ord) import Data.Typeable import Ersatz
examples/sudoku/Main.hs view
@@ -1,8 +1,11 @@+{-# LANGUAGE CPP #-} module Main (main) where  import Prelude hiding ((&&), (||), not, and, or, all, any) +#if __GLASGOW_HASKELL__ < 710 import Control.Applicative+#endif import Control.Monad import Data.Array (Array, (!)) import qualified Data.Array as Array
examples/sudoku/Sudoku/Problem.hs view
@@ -1,8 +1,12 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-} module Sudoku.Problem (problem, range) where  import Prelude hiding ((&&), (||), not, and, or, all, any) +#if __GLASGOW_HASKELL__ < 710 import Control.Applicative+#endif import Control.Monad.Reader import Control.Monad.State import Data.Array (Array, (!))
src/Ersatz/Bit.hs view
@@ -28,7 +28,11 @@  import Control.Applicative import Control.Monad.State+#if __GLASGOW_HASKELL__ < 710 import Data.Foldable (Foldable, toList)+#else+import Data.Foldable (toList)+#endif import qualified Data.Foldable as Foldable import Data.Sequence (Seq, (<|), (|>), (><)) import qualified Data.Sequence as Seq@@ -280,10 +284,10 @@   nor = not . or    -- | The logical conjunction of the mapping of a function over several values.-  all :: (Foldable t, Boolean b) => (a -> b) -> t a -> b+  all :: Foldable t => (a -> b) -> t a -> b    -- | The logical disjunction of the mapping of a function over several values.-  any :: (Foldable t, Boolean b) => (a -> b) -> t a -> b+  any :: Foldable t => (a -> b) -> t a -> b    -- | Exclusive-or   xor :: b -> b -> b
src/Ersatz/Bits.hs view
@@ -1,7 +1,7 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE Safe #-} -------------------------------------------------------------------- -- | -- Copyright :  © Edward Kmett 2010-2015, © Eric Mertens 2014, Johan Kiviniemi 2013@@ -31,9 +31,15 @@ import Control.Monad.Trans.State (State, runState, get, put) import Data.Bits ((.&.), (.|.), shiftL, shiftR) import qualified Data.Bits as Data+#if __GLASGOW_HASKELL__ < 710 import Data.Foldable (Foldable, toList)+#else+import Data.Foldable (toList)+#endif import Data.List (unfoldr, foldl')+#if __GLASGOW_HASKELL__ < 710 import Data.Traversable (traverse)+#endif import Data.Typeable (Typeable) import Data.Word (Word8) import Ersatz.Bit
src/Ersatz/Codec.hs view
@@ -1,6 +1,6 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE Safe #-} -------------------------------------------------------------------- -- | -- Copyright :  © Edward Kmett 2010-2014, Johan Kiviniemi 2013@@ -31,7 +31,11 @@ class Codec a where   type Decoded a :: *   -- | Return a value based on the solution if one can be determined.+#if __GLASGOW_HASKELL__ < 710   decode :: (Alternative f, MonadPlus f) => Solution -> a -> f (Decoded a)+#else+  decode :: MonadPlus f => Solution -> a -> f (Decoded a)+#endif   encode :: Decoded a -> a  instance Codec Literal where
src/Ersatz/Equatable.hs view
@@ -5,7 +5,6 @@ {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE UndecidableInstances #-}-{-# LANGUAGE Safe #-}  {-# OPTIONS_HADDOCK not-home #-} --------------------------------------------------------------------
src/Ersatz/Internal/Formula.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-}@@ -5,7 +6,6 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE Safe #-}  {-# OPTIONS_HADDOCK not-home #-} --------------------------------------------------------------------@@ -27,11 +27,15 @@   , formulaNot, formulaAnd, formulaOr, formulaXor, formulaMux   ) where +#if __GLASGOW_HASKELL__ < 710 import Control.Applicative+#endif import Data.IntSet (IntSet) import qualified Data.IntSet as IntSet import qualified Data.List as List (intersperse)+#if __GLASGOW_HASKELL__ < 710 import Data.Monoid+#endif import Data.Set (Set) import qualified Data.Set as Set import Data.Typeable
src/Ersatz/Internal/Literal.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE Safe #-} -------------------------------------------------------------------- -- | -- Copyright :  © Edward Kmett 2010-2014, Johan Kiviniemi 2013
src/Ersatz/Internal/Parser.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} -------------------------------------------------------------------- -- | -- Copyright :  © Edward Kmett 2010-2014, Johan Kiviniemi 2013@@ -21,7 +22,9 @@ import Control.Applicative import Control.Monad.State import Data.Char (isDigit)+#if __GLASGOW_HASKELL__ < 710 import Data.Traversable (traverse)+#endif  type Parser t a = StateT [t] [] a @@ -40,14 +43,14 @@ string :: Eq t => [t] -> Parser t [t] string = traverse token -integer :: (Integral i, Read i) => Parser Char i+integer :: (Num i, Read i) => Parser Char i integer = negation <*> natural  negation :: Num n => Parser Char (n -> n) negation  =  negate <$ token '-'          <|> pure id -natural :: (Integral i, Read i) => Parser Char i+natural :: Read i => Parser Char i natural = read <$> some (satisfy isDigit)  eof :: Parser t ()
src/Ersatz/Orderable.hs view
@@ -5,7 +5,6 @@ {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE UndecidableInstances #-}-{-# LANGUAGE Safe #-}  {-# OPTIONS_HADDOCK not-home #-} --------------------------------------------------------------------
src/Ersatz/Problem.hs view
@@ -45,7 +45,9 @@   ) where  import Data.ByteString.Builder+#if __GLASGOW_HASKELL__ < 710 import Control.Applicative+#endif import Control.Lens import Control.Monad #if !(MIN_VERSION_lens(4,0,0))@@ -55,7 +57,9 @@ import Data.ByteString (ByteString) import qualified Data.ByteString.Lazy as Lazy import Data.Default+#if __GLASGOW_HASKELL__ < 710 import Data.Foldable (foldMap)+#endif import Data.HashMap.Lazy (HashMap) import qualified Data.HashMap.Lazy as HashMap import Data.Int
src/Ersatz/Solution.hs view
@@ -1,7 +1,7 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE ImpredicativeTypes #-}-{-# LANGUAGE Safe #-} -------------------------------------------------------------------- -- | -- Copyright :  © Edward Kmett 2010-2014, Johan Kiviniemi 2013@@ -17,7 +17,9 @@   , Solver   ) where +#if __GLASGOW_HASKELL__ < 710 import Control.Applicative+#endif import Control.Lens import qualified Data.HashMap.Lazy as HashMap import Data.IntMap (IntMap)
src/Ersatz/Solver.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} -------------------------------------------------------------------- -- | -- Copyright :  © Edward Kmett 2010-2014, Johan Kiviniemi 2013@@ -10,6 +11,7 @@ module Ersatz.Solver   ( module Ersatz.Solver.DepQBF   , module Ersatz.Solver.Minisat+  , module Ersatz.Solver.Z3   , solveWith   ) where @@ -22,8 +24,13 @@ import Ersatz.Solution import Ersatz.Solver.DepQBF import Ersatz.Solver.Minisat+import Ersatz.Solver.Z3 +#if __GLASGOW_HASKELL__ < 710 solveWith :: (Monad m, Alternative n, MonadPlus n, HasSAT s, Default s, Codec a) => Solver s m -> StateT s m a -> m (Result, n (Decoded a))+#else+solveWith :: (Monad m, MonadPlus n, HasSAT s, Default s, Codec a) => Solver s m -> StateT s m a -> m (Result, n (Decoded a))+#endif solveWith solver m = do   (a, problem) <- runStateT m def   (res, litMap) <- solver problem
src/Ersatz/Solver/DepQBF.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE Safe #-} -------------------------------------------------------------------- -- | -- Copyright :  © Edward Kmett 2010-2014, Johan Kiviniemi 2013
src/Ersatz/Solver/Minisat.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE Safe #-} -------------------------------------------------------------------- -- | -- Copyright :  © Edward Kmett 2010-2014, Johan Kiviniemi 2013
+ src/Ersatz/Solver/Z3.hs view
@@ -0,0 +1,68 @@+--------------------------------------------------------------------+-- |+-- Copyright :  © Edward Kmett 2010-2014, Johan Kiviniemi 2013+-- License   :  BSD3+-- Maintainer:  Edward Kmett <ekmett@gmail.com>+-- Stability :  experimental+-- Portability: non-portable+--+--------------------------------------------------------------------+module Ersatz.Solver.Z3+  ( z3+  , z3Path+  ) where++import Data.ByteString.Builder+import Control.Applicative+import Control.Monad.IO.Class+import Data.IntMap (IntMap)+import Ersatz.Internal.Parser+import Ersatz.Problem+import Ersatz.Solution+import Ersatz.Solver.Common+import qualified Data.IntMap as IntMap+import System.IO+import System.Process (readProcessWithExitCode)++-- | 'Solver' for 'SAT' problems that tries to invoke the @z3@ executable from the @PATH@+z3 :: MonadIO m => Solver SAT m+z3 = z3Path "z3"++-- | 'Solver' for 'SAT' problems that tries to invoke a program that takes @z3@ compatible arguments.+--+-- The 'FilePath' refers to the path to the executable.+z3Path :: MonadIO m => FilePath -> Solver SAT m+z3Path path problem = liftIO $+  withTempFiles ".cnf" "" $ \problemPath _ -> do+    withFile problemPath WriteMode $ \fh ->+      hPutBuilder fh (dimacs problem)++    (_exit, out, _err) <-+      readProcessWithExitCode path ["-dimacs", problemPath] []++    let result = case lines out of+                    "sat":_   -> Satisfied+                    "unsat":_ -> Unsatisfied+                    _         -> Unsolved++    return (result, parseSolution out)++parseSolution :: String -> IntMap Bool+parseSolution input =+  case runParser solution input of+    s:_ -> s+    _   -> IntMap.empty++solution :: Parser Char (IntMap Bool)+solution = do+  _ <- string "sat\n"+  IntMap.fromList <$> values++values :: Parser Char [(Int, Bool)]+values  = many value <* token '\n' <* eof++value :: Parser Char (Int, Bool)+value = toPair <$> integer <* token ' '+  where+    toPair n | n >= 0    = ( n, True)+             | otherwise = (-n, False)