module Bio.Location.SeqLocation ( SeqPos, displaySeqPos , ContigSeqLoc, withinContigSeqLoc, displayContigSeqLoc , SeqLoc , isWithin, overlaps, seqData , display ) where import Control.Monad.Error import qualified Data.ByteString.Lazy.Char8 as LBS --import Data.List import qualified Bio.Location.ContigLocation as CLoc import qualified Bio.Location.Location as Loc import Bio.Location.OnSeq import qualified Bio.Location.Position as Pos import Bio.Sequence.SeqData type SeqPos = OnSeq Pos.Pos displaySeqPos :: SeqPos -> String displaySeqPos (OnSeq refname pos) = LBS.unpack refname ++ "@" ++ Pos.display pos type ContigSeqLoc = OnSeq CLoc.ContigLoc withinContigSeqLoc :: SeqPos -> ContigSeqLoc -> Bool withinContigSeqLoc = andSameSeq CLoc.isWithin displayContigSeqLoc :: ContigSeqLoc -> String displayContigSeqLoc (OnSeq refname cloc) = LBS.unpack refname ++ "@" ++ CLoc.display cloc type SeqLoc = OnSeq Loc.Loc isWithin :: SeqPos -> SeqLoc -> Bool isWithin = andSameSeq Loc.isWithin overlaps :: SeqLoc -> SeqLoc -> Bool overlaps = andSameSeq Loc.overlaps seqData :: (Error e, MonadError e m) => (SeqName -> m SeqData) -> SeqLoc -> m SeqData seqData = withSeqData Loc.seqData display :: SeqLoc -> String display (OnSeq refname loc) = LBS.unpack refname ++ "@" ++ Loc.display loc