packages feed

mios 1.5.4 → 1.6.0

raw patch · 8 files changed

+108/−551 lines, 8 filesdep ~basenew-component:exe:mios-1.6.0PVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

Files

− MultiConflict/utils/averagecsv.hs
@@ -1,13 +0,0 @@--- | Usage:--- > mios-averagecsv < a.csv > ave.csv-module Main where--import Data.List (sort)-import SAT.Mios.Util.Stat--main :: IO ()-main = do-  putStrLn $ fst (header :: (String, MergedDump))-  d <- parseBy [(fst (header :: (String, MiosDump)), fromCSV)] <$> getContents-  mapM_ (putStrLn . toCSV) . sort =<< merge d-
− MultiConflict/utils/dump2csv.hs
@@ -1,10 +0,0 @@--- | Usage:--- > mios --dump ... | mios-dump2csv > a.csv-module Main where--import SAT.Mios.Util.Stat--main :: IO ()-main = do-  putStrLn $ fst (header :: (String, MiosDump))-  mapM_ (putStrLn . toCSV) =<< parseBy [("", fromDump)] <$> getContents
− MultiConflict/utils/numbers.hs
@@ -1,119 +0,0 @@--- | Usage:--- > mios-summary < average.csv > summary.tbl (for org-mode or github-flavored markdown)-{-# LANGUAGE ViewPatterns #-}-module Main where--import Data.List (intercalate, lookup, minimumBy, nub)-import Data.Maybe (fromMaybe)-import Data.Ord (comparing)-import Numeric (showFFloat)-import System.Console.GetOpt (ArgDescr(..), ArgOrder(..), getOpt, OptDescr(..), usageInfo)-import System.Environment (getArgs)-import SAT.Mios.Types-import SAT.Mios.Util.Stat--data Opt = Opt-  {-    threshold :: Double-  , p1 :: (Double, Double)-  , p2 :: (Double, Double)-  , p3 :: (Int, Int)-  , p4 :: (Int, Int)-  , message :: String-  , help :: Bool-  }--optDefault :: Opt-optDefault = Opt 0 (0, 10) (0, 10) (0, 10) (0, 10) "#-*-mode:org-*-" False--options ::[OptDescr (Opt -> Opt)]-options =-  [-    Option ['t'] ["threshold"]-    (ReqArg (\v c -> c { threshold = read v }) "0.0") "threshold for p1"-  , Option [] ["UF250"]-    (NoArg (\c -> c { threshold = 12109075.01 })) "threshold for UF250; 12109075.01 (7.083)"-  , Option [] ["38bits"]-    (NoArg (\c -> c { threshold = 191761341.00 })) "threshold for 38bits; 191761341.00 (8.283)"-  , Option [] ["44bits"]-    (NoArg (\c -> c { threshold = 5204447789.00 })) "threshold for 44bits; 5204447789.00 (9.716)"-  , Option ['1'] ["p1"]-    (ReqArg (\v c -> c { p1 = read v }) "\"(0,10)\"") "range of p1"-  , Option ['2'] ["p2"]-    (ReqArg (\v c -> c { p2 = read v }) "\"(0,10)\"") "range of p2"-  , Option ['3'] ["p3"]-    (ReqArg (\v c -> c { p3 = read v }) "\"(0,10)\"") "range of p3"-  , Option ['4'] ["p4"]-    (ReqArg (\v c -> c { p4 = read v }) "\"(0,10)\"") "range of p4"-  , Option ['m'] ["message"]-    (ReqArg (\v c -> c { message = undecodeNewline v }) "\"\"") "extra message embeded into output"-  , Option ['h'] ["help"]-    (NoArg (\c -> c { help = True })) "display help message"-  ]--parseOptions :: String -> [String] -> IO Opt-parseOptions mes argv =-    case getOpt Permute options argv of-      (o,  [], []) -> return $ foldl (flip id) optDefault o-      (o,   _, []) -> return $ foldl (flip id) optDefault o-      (_,   _, err) -> ioError (userError (concat err ++ usageInfo mes options))---- | builds "MiosProgramOption" from a String-parseOptionsFromArgs :: String -> IO Opt-parseOptionsFromArgs mes = parseOptions mes =<< getArgs--undecodeNewline :: String -> String-undecodeNewline [] = []-undecodeNewline [a] = [a]-undecodeNewline ('\\' : 'n' : x) = '\n' : undecodeNewline x-undecodeNewline (a : x) = a : undecodeNewline x--showf :: Double -> String-showf x = showFFloat (Just 2) x ""--main :: IO ()-main = do-  opts <- parseOptionsFromArgs "gp-summary"-  if help opts-    then putStrLn $ usageInfo "" options-    else do putStrLn $ message opts-            putStrLn ""-            putStrLn "| p1   | good | bad |"-            putStrLn "| ---- | ---- | --- |"-            result <- pickup opts . parseBy [(fst (header :: (String, MergedDump)), fromMergedCSV)] <$> getContents-            mapM_ (putStrLn . toString) result-            let ngs = sum $ map (fst . snd) result-                nbs = sum $ map (snd . snd) result-            putStrLn $ intercalate "," [showf (fromIntegral ngs / fromIntegral (ngs + nbs)), show (ngs + nbs) ++ "/" ++ show (ngs, nbs)]--toString :: (Double, (Int, Int))  -> String-toString (p1, (ng, nb)) = "| " ++ intercalate " | " [showf p1, show ng, show nb] ++ " |"--pickup :: Opt -> [MergedDump] -> [(Double, (Int, Int))]-pickup opts l = filter notEmpty $ map gather keys-  where-    notEmpty (_, (0, 0)) = False-    notEmpty _ = True-    thr = threshold opts-    keys = nub $ map (gpParameter1 .  snd. _mergedConf) l-    gather :: Double -> (Double, (Int, Int))-    gather key = (key, (ng, length targets - ng))-      where-        targets' :: [MergedDump]-        targets' = filter ((key ==) . gpParameter1 .  snd. _mergedConf) l-        inBand :: MergedDump -> Bool-        inBand (_mergedConf -> snd -> conf) = c1 && c2 && c3 && c4-          where-            c1 = inPair (p1 opts) (gpParameter1 conf)-            c2 = inPair (p2 opts) (gpParameter2 conf)-            c3 = inPair (p3 opts) (extraParameter3 conf)-            c4 = inPair (p4 opts) (extraParameter4 conf)-            inPair :: (Num a, Ord a) => (a, a) -> a -> Bool-            inPair (b, t) x = b <= x && x <= t-        targets = filter inBand targets'-        ng = length $ filter (< thr) (map value targets)-    value :: MergedDump -> Double-    value m = case lookup PropagationS . (\(MiosStats s) -> s) . _mergedStat $ m of-      Just (Right v) -> fromIntegral v-      Just (Left v)  -> v-      Nothing        -> 10000000
− MultiConflict/utils/pickup.hs
@@ -1,123 +0,0 @@--- | Usage:--- > mios-summary < average.csv > summary.tbl (for org-mode or github-flavored markdown)-module Main where--import Data.List (intercalate, lookup, maximumBy, minimumBy, nub)-import Data.Maybe (fromMaybe)-import Data.Ord (comparing)-import Numeric (showFFloat)-import System.Console.GetOpt (ArgDescr(..), ArgOrder(..), getOpt, OptDescr(..), usageInfo)-import System.Environment (getArgs)-import SAT.Mios.Types-import SAT.Mios.Util.Stat--data Opt = Opt-  {-    message :: String-  , useLog :: Bool-  , help :: Bool-  }--optDefault :: Opt-optDefault = Opt "#-*-mode:org-*-" False False--options ::[OptDescr (Opt -> Opt)]-options =-  [-    Option ['m'] ["message"]-    (ReqArg (\v c -> c { message = undecodeNewline v }) "\"string\"") "extra message embeded into output"-  , Option ['l'] ["useLog"]-    (NoArg (\c -> c { useLog = True })) "use Logarithmic value for propagation"-  , Option ['h'] ["help"]-    (NoArg (\c -> c { help = True })) "display help message"-  ]--parseOptions :: String -> [String] -> IO Opt-parseOptions mes argv =-    case getOpt Permute options argv of-      (o,  [], []) -> return $ foldl (flip id) optDefault o-      (o,   _, []) -> return $ foldl (flip id) optDefault o-      (_,   _, err) -> ioError (userError (concat err ++ usageInfo mes options))---- | builds "MiosProgramOption" from a String-parseOptionsFromArgs :: String -> IO Opt-parseOptionsFromArgs mes = parseOptions mes =<< getArgs--undecodeNewline :: String -> String-undecodeNewline [] = []-undecodeNewline [a] = [a]-undecodeNewline ('\\' : 'n' : x) = '\n' : undecodeNewline x-undecodeNewline (a : x) = a : undecodeNewline x--showf :: Double -> String-showf x = showFFloat (Just 2) x ""--showi :: Int -> String-showi x-  | 3 <= length s = s-  | otherwise = reverse . take 3 . (++ "   ") . reverse $ s-  where s = show x--showl :: Either Double Int -> String-showl (Left x) = showf x-showl (Right x) = showf (fromIntegral x)--main :: IO ()-main = do-  opts <- parseOptionsFromArgs "gp-summary"-  if help opts-    then putStrLn $ usageInfo "" options-    else do let parsers = [ (fst (header :: (String, MiosDump)), toMerge <$> fromCSV)-                          , (fst (header :: (String, MergedDump)), fromMergedCSV)]-            putStrLn $ message opts-            putStrLn ""-            if useLog opts-              then do putStrLn "|   n |   p1 |   p2 |  p3 |  p4 | log(P) | conflict |   learnt | backjump | re-st | rate |  extra | pr/bj |"-                      putStrLn "| --- | ---- | ---- | --- | --- | ------ | -------- | -------- | -------- | ----- | ---- |  ----- | ----- |"-              else do putStrLn "|   n |   p1 |   p2 |  p3 |  p4 | propagation | conflict |   learnt | backjump | re-st | rate |  extra | pr/bj |"-                      putStrLn "| --- | ---- | ---- | --- | --- | ----------- | -------- | -------- | -------- | ----- | ---- |  ----- | ----- |"-            d <- parseBy parsers <$> getContents-            mapM_ (putStrLn . toSummary (useLog opts)) $ pickup True d-            putStrLn ""-            mapM_ (putStrLn . toSummary (useLog opts)) $ pickup False d-            putStrLn ""--toSummary :: Bool -> MergedDump -> String-toSummary uLog (MergedDump (_, MiosConfiguration _ _ p1 p2 p3 p4) n (MiosStats l) _) =-  "| " ++ intercalate " | " [show n, m', s', showf pr] ++ " |"-  where-    m' = intercalate " | " [showf p1, showf p2, showi p3, showi p4]-    s' = intercalate " | " $ map (showl . snd) (convert uLog l) -- (tail . init $ l)-    convert :: Bool -> [DumpedValue] -> [DumpedValue]-    convert uL ks-      | uL = logOf PropagationS : map valOf [ConflictS .. ExtraS]-      | otherwise = map valOf [PropagationS .. ExtraS]-      where-        logOf :: DumpTag -> DumpedValue-        logOf key = (key, Left $ logBase 10 (val key))-        valOf key = (key, Left $ val key)-        val :: DumpTag -> Double-        val key-          | Just (Left x) <- lookup key ks = x-          | Just (Right x) <- lookup key ks = fromIntegral x-          | otherwise = 0-    pr = fromMaybe 0 $ div' <$> lookup PropagationS l <*> lookup BackjumpS l-    div' :: Either Double Int -> Either Double Int -> Double-    div' (Right a) (Right b) = fromIntegral a / fromIntegral b-    div' (Right a) (Left b)  = fromIntegral a / b-    div' (Left a) (Right b)  = a / fromIntegral b-    div' (Left a) (Left b)   = a / b--pickup :: Bool -> [MergedDump] -> [MergedDump]-pickup good l = map selectData keys-  where-    keys = nub $ map (gpParameter1 .  snd. _mergedConf) l-    selectData :: Double -> MergedDump-    selectData key-      | good      = minimumBy (comparing value) $ filter ((key ==) . gpParameter1 .  snd. _mergedConf) l-      | otherwise = maximumBy (comparing value) $ filter ((key ==) . gpParameter1 .  snd. _mergedConf) l-    value :: MergedDump -> Double-    value m = case lookup PropagationS . (\(MiosStats s) -> s) . _mergedStat $ m of-      Just (Right v) -> fromIntegral v-      Just (Left v)  -> v-      Nothing        -> 10000000
− MultiConflict/utils/stat2csv.hs
@@ -1,10 +0,0 @@--- | Usage:--- > mios --stat -X ... | mios-stat2csv > a.csv-module Main where--import SAT.Mios.Util.Stat--main :: IO ()-main = do-  putStrLn $ fst (header :: (String, MiosDump))-  mapM_ (putStrLn . toCSV) =<< parseBy [("", fromStat)] <$> getContents
− MultiConflict/utils/summary.hs
@@ -1,104 +0,0 @@--- | Usage:--- > mios-summary < average.csv > summary.tbl (for org-mode or github-flavored markdown)-module Main where--import Data.List (intercalate, lookup)-import Data.Maybe (fromMaybe)-import Numeric (showFFloat)-import System.Console.GetOpt (ArgDescr(..), ArgOrder(..), getOpt, OptDescr(..), usageInfo)-import System.Environment (getArgs)-import SAT.Mios.Types-import SAT.Mios.Util.Stat--data Opt = Opt-  {-    message :: String-  , useLog :: Bool-  , help :: Bool-  }--optDefault :: Opt-optDefault = Opt "#-*-mode:org-*-" False False--options ::[OptDescr (Opt -> Opt)]-options =-  [-    Option ['m'] ["message"]-    (ReqArg (\v c -> c { message = undecodeNewline v }) "\"string\"") "extra message embeded into output"-  , Option ['l'] ["useLog"]-    (NoArg (\c -> c { useLog = True })) "use Logarithmic value for propagation"-  , Option ['h'] ["help"]-    (NoArg (\c -> c { help = True })) "display help message"-  ]--parseOptions :: String -> [String] -> IO Opt-parseOptions mes argv =-    case getOpt Permute options argv of-      (o,  [], []) -> return $ foldl (flip id) optDefault o-      (o,   _, []) -> return $ foldl (flip id) optDefault o-      (_,   _, err) -> ioError (userError (concat err ++ usageInfo mes options))---- | builds "MiosProgramOption" from a String-parseOptionsFromArgs :: String -> IO Opt-parseOptionsFromArgs mes = parseOptions mes =<< getArgs--undecodeNewline :: String -> String-undecodeNewline [] = []-undecodeNewline [a] = [a]-undecodeNewline ('\\' : 'n' : x) = '\n' : undecodeNewline x-undecodeNewline (a : x) = a : undecodeNewline x--showf :: Double -> String-showf x = showFFloat (Just 2) x ""--showi :: Int -> String-showi x-  | 3 <= length s = s-  | otherwise = reverse . take 3 . (++ "   ") . reverse $ s-  where s = show x--showl :: Either Double Int -> String-showl (Left x) = showf x-showl (Right x) = showf (fromIntegral x)--main :: IO ()-main = do-  opts <- parseOptionsFromArgs "gp-summary"-  if help opts-    then putStrLn $ usageInfo "" options-    else do let parsers = [ (fst (header :: (String, MiosDump)), toMerge <$> fromCSV)-                          , (fst (header :: (String, MergedDump)), fromMergedCSV)]-            putStrLn $ message opts-            putStrLn ""-            if useLog opts-              then do putStrLn "|   n |   p1 |   p2 |  p3 |  p4 | log(P) | conflict |   learnt | backjump | re-st | rate | extra | pr/bj |"-                      putStrLn "| --- | ---- | ---- | --- | --- | ------ | -------- | -------- | -------- | ----- | ---- | ----- | ----- |"-              else do putStrLn "|   n |   p1 |   p2 |  p3 |  p4 | propagation | conflict |   learnt | backjump | re-st | rate | extra | pr/bj |"-                      putStrLn "| --- | ---- | ---- | --- | --- | ----------- | -------- | -------- | -------- | ----- | ---- | ----- | ----- |"-            mapM_ (putStrLn . toSummary (useLog opts)) . parseBy parsers =<< getContents--toSummary :: Bool -> MergedDump -> String-toSummary uLog (MergedDump (_, MiosConfiguration _ _ p1 p2 p3 p4) n (MiosStats l) _) =-  "| " ++ intercalate " | " [show n, m', s', showf pr] ++ " |"-  where-    m' = intercalate " | " [showf p1, showf p2, showi p3, showi p4]-    s' = intercalate " | " $ map (showl . snd) (convert uLog l) -- (tail . init $ l)-    convert :: Bool -> [DumpedValue] -> [DumpedValue]-    convert uL ks-      | uL = logOf PropagationS : map valOf [ConflictS .. ExtraS]-      | otherwise = map valOf [PropagationS .. ExtraS]-      where-        logOf :: DumpTag -> DumpedValue-        logOf key = (key, Left $ logBase 10 (val key))-        valOf key = (key, Left $ val key)-        val :: DumpTag -> Double-        val key-          | Just (Left x) <- lookup key ks = x-          | Just (Right x) <- lookup key ks = fromIntegral x-          | otherwise = 0-    pr = fromMaybe 0 $ div' <$> lookup PropagationS l <*> lookup BackjumpS l-    div' :: Either Double Int -> Either Double Int -> Double-    div' (Right a) (Right b) = fromIntegral a / fromIntegral b-    div' (Right a) (Left b)  = fromIntegral a / b-    div' (Left a) (Right b)  = a / fromIntegral b-    div' (Left a) (Left b)   = a / b
mios.cabal view
@@ -1,190 +1,126 @@--- Initial mios.cabal generated by cabal init.  For further documentation,--- see http://haskell.org/cabal/users-guide/--name:                   mios-version:                1.5.4-synopsis:               A Minisat-based CDCL SAT solver in Haskell-description:+-- This file has been generated from package.yaml by hpack version 0.20.0.+--+-- see: https://github.com/sol/hpack+--+-- hash: 1a93fd2f2b1b1d0ba5e203ac6b48c5ca8abd31384c1955776cfb00969c311cbb -  A modern and very fast SAT solver written in Haskell, using CDCL, watch literals, VSIDS,-  blocking-literals, phase saving, LBD, Glucose-like restart and so on.-  'Mios' is an abbreviation of 'Minisat-based Implementation and Optimization Study on SAT solver'.-  .+name:           mios+version:        1.6.0+synopsis:       A Minisat-based CDCL SAT solver in Haskell+description:    A modern and very fast SAT solver written in Haskell, using CDCL, watch literals, VSIDS, blocking-literals, phase saving, LBD, Glucose-like restart and so on. 'Mios' is an abbreviation of 'Minisat-based Implementation and Optimization Study on SAT solver'.+category:       Artificial Intelligence, Constraints+homepage:       https://github.com/shnarazk/mios+bug-reports:    https://github.com/shnarazk/mios/issues+author:         Shuji Narazaki+maintainer:     narazaki@nagasaki-u.ac.jp+copyright:      2017 Shuji Narazaki+license:        GPL-3+license-file:   LICENSE+build-type:     Simple+cabal-version:  >= 1.10 -homepage:               https://github.com/shnarazk/mios-license:                GPL-3-license-file:           LICENSE-author:                 Shuji Narazaki <narazaki@nagasaki-u.ac.jp>-maintainer:             Shuji Narazaki <narazaki@nagasaki-u.ac.jp>-category:               Artificial Intelligence, Constraints-build-type:             Simple-cabal-version:          >=1.16-extra-source-files:     app/sample.hs+extra-source-files:+    app/sample.hs  source-repository head-  type:                 git-  location:             https://github.com/shnarazk/mios--Flag llvm-  Description:	        Compile with llvm-  Default:	        False+  type: git+  location: https://github.com/shnarazk/mios -Flag MultiConflict-  Description:	        Build tools in MultiConflict-  Default:	        False+flag llvm+  description: Compile with llvm+  manual: True+  default: False -Flag utils-  Description:	        Build misc utilities for developer-  Default:	        False+flag utils+  description: Build misc utilities for developer+  manual: True+  default: False  library-  hs-source-dirs:	src-  default-language:	Haskell2010-  default-extensions:   Strict-  other-extensions:	BangPatterns-                        FlexibleContexts-                        FlexibleInstances-                        FunctionalDependencies-                        MagicHash-                        MultiParamTypeClasses-                        RecordWildCards-                        ScopedTypeVariables-                        TypeFamilies-                        Trustworthy-                        TupleSections-                        Safe-                        UndecidableInstances-                        ViewPatterns-  exposed-modules:-                        SAT.Mios.Clause-                        SAT.Mios.ClauseManager-                        SAT.Mios.ClausePool-                        SAT.Mios.Criteria-                        SAT.Mios.Main-                        SAT.Mios.OptionParser-                        SAT.Mios.Solver-                        SAT.Mios.Vec-                        SAT.Mios.Types-                        SAT.Mios.Validator-                        SAT.Mios.Util.DIMACS.MinisatReader-                        SAT.Mios.Util.DIMACS.Reader-                        SAT.Mios.Util.DIMACS.Writer-                        SAT.Mios.Util.DIMACS-                        SAT.Mios.Util.BoolExp-                        SAT.Mios-  build-depends:        base >=4.10 && < 5, vector >=0.12, ghc-prim >=0.5, bytestring >=0.10, primitive >=0.6+  hs-source-dirs:+      src+  default-extensions: Strict+  build-depends:+      base >=4.7 && <5+    , bytestring >=0.10+    , ghc-prim >=0.5+    , primitive >=0.6+    , vector >=0.12   if flag(llvm)-    ghc-options:	-O2 -funbox-strict-fields -fllvm -optlo-O3 -optlc-O3 -fwarn-missing-signatures+    ghc-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -optlc-O3 -fwarn-missing-signatures+    ghc-prof-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -fprof-auto   else-    ghc-options:	-O2 -funbox-strict-fields -msse2 -fwarn-missing-signatures+    ghc-options: -O2 -funbox-strict-fields -msse2 -fwarn-missing-signatures+    ghc-prof-options: -O2 -funbox-strict-fields -fprof-auto+  exposed-modules:+      SAT.Mios+      SAT.Mios.Clause+      SAT.Mios.ClauseManager+      SAT.Mios.ClausePool+      SAT.Mios.Criteria+      SAT.Mios.Main+      SAT.Mios.OptionParser+      SAT.Mios.Solver+      SAT.Mios.Types+      SAT.Mios.Util.BoolExp+      SAT.Mios.Util.DIMACS+      SAT.Mios.Util.DIMACS.MinisatReader+      SAT.Mios.Util.DIMACS.Reader+      SAT.Mios.Util.DIMACS.Writer+      SAT.Mios.Validator+      SAT.Mios.Vec+  other-modules:+      Paths_mios+  default-language: Haskell2010 -executable mios-1.5.4-  hs-source-dirs:	app-  main-is:              mios.hs-  buildable:	        True-  default-language:	Haskell2010-  default-extensions:   Strict-  build-depends:        base >=4.10 && < 5, mios+executable cnf-stat+  main-is: cnf-stat.hs+  hs-source-dirs:+      utils+  default-extensions: Strict+  build-depends:+      base >=4.7 && <5+    , bytestring >=0.10+    , ghc-prim >=0.5+    , mios+    , primitive >=0.6+    , vector >=0.12   if flag(llvm)-    ghc-options:	-O2 -funbox-strict-fields -fllvm -optlo-O3 -optlc-O3 -rtsopts -fwarn-missing-signatures+    ghc-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -optlc-O3 -fwarn-missing-signatures+    ghc-prof-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -fprof-auto   else-    ghc-options:	-O2 -funbox-strict-fields -msse2 -rtsopts -fwarn-missing-signatures--executable cnf-stat-  hs-source-dirs:	utils-  main-is:              cnf-stat.hs+    ghc-options: -O2 -funbox-strict-fields -msse2 -fwarn-missing-signatures+    ghc-prof-options: -O2 -funbox-strict-fields -fprof-auto   if flag(utils)-    buildable:	        True+    buildable: True   else-    buildable:	        False-  default-language:	Haskell2010-  default-extensions:   Strict-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields+    buildable: False+  other-modules:+      Paths_mios+  default-language: Haskell2010 -executable mios-mc-  hs-source-dirs:	MultiConflict app-  main-is:              mios.hs-  if flag(MultiConflict)-    buildable:	        True-  else-    buildable:	        False-  default-language:	Haskell2010-  default-extensions:   Strict-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10+executable mios-1.6.0+  main-is: mios.hs+  hs-source-dirs:+      app+  default-extensions: Strict+  build-depends:+      base >=4.7 && <5+    , bytestring >=0.10+    , ghc-prim >=0.5+    , mios+    , primitive >=0.6+    , vector >=0.12   if flag(llvm)-    ghc-options:	-O2 -ignore-asserts -funbox-strict-fields -fllvm -optlo-O2 -optlc-O2-  else-    ghc-options:	-O2 -ignore-asserts -funbox-strict-fields--executable mc-dump2csv-  hs-source-dirs:	MultiConflict-  main-is:              utils/dump2csv.hs-  if flag(MultiConflict) && flag(utils)-    buildable:	        True-  else-    buildable:	        False-  default-language:	Haskell2010-  default-extensions:   Strict-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields--executable mc-averagecsv-  hs-source-dirs:	MultiConflict-  main-is:              utils/averagecsv.hs-  if flag(MultiConflict) && flag(utils)-    buildable:	        True-  else-    buildable:	        False-  default-language:	Haskell2010-  default-extensions:   Strict-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields--executable mc-summary-  hs-source-dirs:	MultiConflict-  main-is:              utils/summary.hs-  if flag(MultiConflict) && flag(utils)-    buildable:	        True-  else-    buildable:	        False-  default-language:	Haskell2010-  default-extensions:   Strict-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields--executable mc-stat2csv-  hs-source-dirs:	MultiConflict-  main-is:              utils/stat2csv.hs-  if flag(MultiConflict) && flag(utils)-    buildable:	        True-  else-    buildable:	        False-  default-language:	Haskell2010-  default-extensions:   Strict-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields--executable mc-pickup-  hs-source-dirs:	MultiConflict-  main-is:              utils/pickup.hs-  if flag(MultiConflict) && flag(utils)-    buildable:	        True+    ghc-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -optlc-O3 -fwarn-missing-signatures+    ghc-prof-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -fprof-auto   else-    buildable:	        False-  default-language:	Haskell2010-  default-extensions:   Strict-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields--executable mc-numbers-  hs-source-dirs:	MultiConflict-  main-is:              utils/numbers.hs-  if flag(MultiConflict) && flag(utils)-    buildable:	        True+    ghc-options: -O2 -funbox-strict-fields -msse2 -fwarn-missing-signatures+    ghc-prof-options: -O2 -funbox-strict-fields -fprof-auto+  if flag(llvm)+    ghc-prof-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -fprof-auto -rtsopts   else-    buildable:	        False-  default-language:	Haskell2010-  default-extensions:   Strict-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields+    ghc-prof-options: -O2 -funbox-strict-fields -fprof-auto -rtsopts+  other-modules:+      Paths_mios+  default-language: Haskell2010
src/SAT/Mios.hs view
@@ -52,7 +52,7 @@  -- | version name versionId :: String-versionId = "mios-1.5.4 -- https://github.com/shnarazk/mios"+versionId = "mios-1.6.0 -- https://github.com/shnarazk/mios"  reportElapsedTime :: Bool -> String -> Integer -> IO Integer reportElapsedTime False _ 0 = return 0