toysolver-0.8.0: src/ToySolver/FileFormat.hs
{-# OPTIONS_GHC -Wall -fno-warn-orphans #-}
{-# LANGUAGE FlexibleInstances #-}
-----------------------------------------------------------------------------
-- |
-- Module : ToySolver.FileFormat
-- Copyright : (c) Masahiro Sakai 2018
-- License : BSD-style
--
-- Maintainer : masahiro.sakai@gmail.com
-- Stability : provisional
-- Portability : non-portable
--
-----------------------------------------------------------------------------
module ToySolver.FileFormat
( module ToySolver.FileFormat.Base
, WithFastParser (..)
) where
import qualified Data.PseudoBoolean as PBFile
import qualified Data.PseudoBoolean.Attoparsec as PBFileAttoparsec
import qualified Data.PseudoBoolean.Megaparsec as PBFileMegaparsec
import qualified Data.PseudoBoolean.ByteStringBuilder as PBFileBB
import ToySolver.FileFormat.Base
import ToySolver.FileFormat.CNF () -- importing instances
import ToySolver.QUBO () -- importing instances
import Text.Megaparsec.Error (errorBundlePretty)
instance FileFormat PBFile.Formula where
parse s =
case PBFileMegaparsec.parseOPBByteString "-" s of
Left err -> Left (errorBundlePretty err)
Right x -> Right x
render x = PBFileBB.opbBuilder x
instance FileFormat PBFile.SoftFormula where
parse s =
case PBFileMegaparsec.parseWBOByteString "-" s of
Left err -> Left (errorBundlePretty err)
Right x -> Right x
render x = PBFileBB.wboBuilder x
-- | Wrapper type for parsing opb/wbo files using attoparsec-based parser instead of megaparsec-based one.
newtype WithFastParser a
= WithFastParser
{ unWithFastParser :: a
}
instance FileFormat (WithFastParser PBFile.Formula) where
parse = fmap WithFastParser . PBFileAttoparsec.parseOPBByteString
render (WithFastParser x) = PBFileBB.opbBuilder x
instance FileFormat (WithFastParser PBFile.SoftFormula) where
parse = fmap WithFastParser . PBFileAttoparsec.parseWBOByteString
render (WithFastParser x) = PBFileBB.wboBuilder x