import Prelude hiding ((||), (&&), not, and, or) import Data.Char import Data.Array import Data.Ix import Data.Word import Control.Monad import Control.Monad.State import Ersatz -- (ersatz-0.2) fieldRange = ((1,1),(9,9)) unique :: Equatable a => [a] -> Bit unique = go [] where go ss (x:xs) = and (map (/==x) ss) && go (x : ss) xs go _ [] = true sudoku :: (MonadState s m, HasSAT s) => Array (Int, In