ersatz-0.4: A monad for expressing SAT or QSAT problems using observable sharing.

Copyright© Edward Kmett 2010-2014 Johan Kiviniemi 2013
LicenseBSD3
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Ersatz.Codec

Description

 

Synopsis

Documentation

class Codec a where #

This class describes data types that can be marshaled to or from a SAT solver.

Minimal complete definition

decode, encode

Associated Types

type Decoded a :: * #

Methods

decode :: MonadPlus f => Solution -> a -> f (Decoded a) #

Return a value based on the solution if one can be determined.

encode :: Decoded a -> a #

Instances

Codec () # 

Associated Types

type Decoded () :: * #

Methods

decode :: MonadPlus f => Solution -> () -> f (Decoded ()) #

encode :: Decoded () -> () #

Codec Literal # 

Associated Types

type Decoded Literal :: * #

Codec Bit # 

Associated Types

type Decoded Bit :: * #

Methods

decode :: MonadPlus f => Solution -> Bit -> f (Decoded Bit) #

encode :: Decoded Bit -> Bit #

Codec Bits # 

Associated Types

type Decoded Bits :: * #

Methods

decode :: MonadPlus f => Solution -> Bits -> f (Decoded Bits) #

encode :: Decoded Bits -> Bits #

Codec Bit8 # 

Associated Types

type Decoded Bit8 :: * #

Methods

decode :: MonadPlus f => Solution -> Bit8 -> f (Decoded Bit8) #

encode :: Decoded Bit8 -> Bit8 #

Codec Bit7 # 

Associated Types

type Decoded Bit7 :: * #

Methods

decode :: MonadPlus f => Solution -> Bit7 -> f (Decoded Bit7) #

encode :: Decoded Bit7 -> Bit7 #

Codec Bit6 # 

Associated Types

type Decoded Bit6 :: * #

Methods

decode :: MonadPlus f => Solution -> Bit6 -> f (Decoded Bit6) #

encode :: Decoded Bit6 -> Bit6 #

Codec Bit5 # 

Associated Types

type Decoded Bit5 :: * #

Methods

decode :: MonadPlus f => Solution -> Bit5 -> f (Decoded Bit5) #

encode :: Decoded Bit5 -> Bit5 #

Codec Bit4 # 

Associated Types

type Decoded Bit4 :: * #

Methods

decode :: MonadPlus f => Solution -> Bit4 -> f (Decoded Bit4) #

encode :: Decoded Bit4 -> Bit4 #

Codec Bit3 # 

Associated Types

type Decoded Bit3 :: * #

Methods

decode :: MonadPlus f => Solution -> Bit3 -> f (Decoded Bit3) #

encode :: Decoded Bit3 -> Bit3 #

Codec Bit2 # 

Associated Types

type Decoded Bit2 :: * #

Methods

decode :: MonadPlus f => Solution -> Bit2 -> f (Decoded Bit2) #

encode :: Decoded Bit2 -> Bit2 #

Codec Bit1 # 

Associated Types

type Decoded Bit1 :: * #

Methods

decode :: MonadPlus f => Solution -> Bit1 -> f (Decoded Bit1) #

encode :: Decoded Bit1 -> Bit1 #

Codec BitChar # 

Associated Types

type Decoded BitChar :: * #

Codec a => Codec [a] # 

Associated Types

type Decoded [a] :: * #

Methods

decode :: MonadPlus f => Solution -> [a] -> f (Decoded [a]) #

encode :: Decoded [a] -> [a] #

Codec a => Codec (Maybe a) # 

Associated Types

type Decoded (Maybe a) :: * #

Methods

decode :: MonadPlus f => Solution -> Maybe a -> f (Decoded (Maybe a)) #

encode :: Decoded (Maybe a) -> Maybe a #

Codec a => Codec (IntMap a) # 

Associated Types

type Decoded (IntMap a) :: * #

Methods

decode :: MonadPlus f => Solution -> IntMap a -> f (Decoded (IntMap a)) #

encode :: Decoded (IntMap a) -> IntMap a #

Codec a => Codec (Tree a) # 

Associated Types

type Decoded (Tree a) :: * #

Methods

decode :: MonadPlus f => Solution -> Tree a -> f (Decoded (Tree a)) #

encode :: Decoded (Tree a) -> Tree a #

Codec a => Codec (Seq a) # 

Associated Types

type Decoded (Seq a) :: * #

Methods

decode :: MonadPlus f => Solution -> Seq a -> f (Decoded (Seq a)) #

encode :: Decoded (Seq a) -> Seq a #

(Codec a, Codec b) => Codec (Either a b) # 

Associated Types

type Decoded (Either a b) :: * #

Methods

decode :: MonadPlus f => Solution -> Either a b -> f (Decoded (Either a b)) #

encode :: Decoded (Either a b) -> Either a b #

(Codec a, Codec b) => Codec (a, b) # 

Associated Types

type Decoded (a, b) :: * #

Methods

decode :: MonadPlus f => Solution -> (a, b) -> f (Decoded (a, b)) #

encode :: Decoded (a, b) -> (a, b) #

(Ix i, Codec e) => Codec (Array i e) # 

Associated Types

type Decoded (Array i e) :: * #

Methods

decode :: MonadPlus f => Solution -> Array i e -> f (Decoded (Array i e)) #

encode :: Decoded (Array i e) -> Array i e #

Codec a => Codec (Map k a) # 

Associated Types

type Decoded (Map k a) :: * #

Methods

decode :: MonadPlus f => Solution -> Map k a -> f (Decoded (Map k a)) #

encode :: Decoded (Map k a) -> Map k a #

Codec a => Codec (HashMap k a) # 

Associated Types

type Decoded (HashMap k a) :: * #

Methods

decode :: MonadPlus f => Solution -> HashMap k a -> f (Decoded (HashMap k a)) #

encode :: Decoded (HashMap k a) -> HashMap k a #

(Ix a, Ix b) => Codec (Relation a b) # 

Associated Types

type Decoded (Relation a b) :: * #

Methods

decode :: MonadPlus f => Solution -> Relation a b -> f (Decoded (Relation a b)) #

encode :: Decoded (Relation a b) -> Relation a b #

(Codec a, Codec b, Codec c) => Codec (a, b, c) # 

Associated Types

type Decoded (a, b, c) :: * #

Methods

decode :: MonadPlus f => Solution -> (a, b, c) -> f (Decoded (a, b, c)) #

encode :: Decoded (a, b, c) -> (a, b, c) #

(Codec a, Codec b, Codec c, Codec d) => Codec (a, b, c, d) # 

Associated Types

type Decoded (a, b, c, d) :: * #

Methods

decode :: MonadPlus f => Solution -> (a, b, c, d) -> f (Decoded (a, b, c, d)) #

encode :: Decoded (a, b, c, d) -> (a, b, c, d) #

(Codec a, Codec b, Codec c, Codec d, Codec e) => Codec (a, b, c, d, e) # 

Associated Types

type Decoded (a, b, c, d, e) :: * #

Methods

decode :: MonadPlus f => Solution -> (a, b, c, d, e) -> f (Decoded (a, b, c, d, e)) #

encode :: Decoded (a, b, c, d, e) -> (a, b, c, d, e) #

(Codec a, Codec b, Codec c, Codec d, Codec e, Codec f) => Codec (a, b, c, d, e, f) # 

Associated Types

type Decoded (a, b, c, d, e, f) :: * #

Methods

decode :: MonadPlus f => Solution -> (a, b, c, d, e, f) -> f (Decoded (a, b, c, d, e, f)) #

encode :: Decoded (a, b, c, d, e, f) -> (a, b, c, d, e, f) #

(Codec a, Codec b, Codec c, Codec d, Codec e, Codec f, Codec g) => Codec (a, b, c, d, e, f, g) # 

Associated Types

type Decoded (a, b, c, d, e, f, g) :: * #

Methods

decode :: MonadPlus f => Solution -> (a, b, c, d, e, f, g) -> f (Decoded (a, b, c, d, e, f, g)) #

encode :: Decoded (a, b, c, d, e, f, g) -> (a, b, c, d, e, f, g) #

(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) # 

Associated Types

type Decoded (a, b, c, d, e, f, g, h) :: * #

Methods

decode :: MonadPlus f => Solution -> (a, b, c, d, e, f, g, h) -> f (Decoded (a, b, c, d, e, f, g, h)) #

encode :: Decoded (a, b, c, d, e, f, g, h) -> (a, b, c, d, e, f, g, h) #