bio-0.3.5: Bio/Location/SeqLocMap.hs
module Bio.Location.SeqLocMap ( SeqLocMap
, empty
, fromList, insert
, lookupWithin, lookupOverlaps
)
where
import Control.Arrow (first)
import Data.List hiding (insert)
import qualified Data.Map as M
import Bio.Location.OnSeq
import qualified Bio.Location.LocMap as LM
import qualified Bio.Location.SeqLocation as SeqLoc
type SeqLocMap a = OnSeqs (LM.LocMap a)
empty :: SeqLocMap a
empty = M.empty
fromList :: [(SeqLoc.SeqLoc, a)] -> SeqLocMap a
fromList = foldl' (\lm (sl,x) -> insert sl x lm) M.empty
insert :: SeqLoc.SeqLoc -> a -> SeqLocMap a -> SeqLocMap a
insert sloc x = perSeqUpdate (\loc locmap -> LM.insert loc x locmap) sloc
lookupWithin :: SeqLoc.SeqPos -> SeqLocMap a -> [(SeqLoc.SeqLoc, a)]
lookupWithin = withNameAndSeq namedLookupWithin
where namedLookupWithin seqname pos = map (first $ OnSeq seqname) . LM.lookupWithin pos
lookupOverlaps :: SeqLoc.SeqLoc -> SeqLocMap a -> [(SeqLoc.SeqLoc, a)]
lookupOverlaps = withNameAndSeq namedLookupOverlaps
where namedLookupOverlaps seqname loc = map (first $ OnSeq seqname) . LM.lookupOverlaps loc