summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Bedo <cu@cua0.org>2023-08-03 09:03:04 +1000
committerJustin Bedo <cu@cua0.org>2023-08-03 09:03:04 +1000
commitbe57c3a0f907661fba2ef559529be743dca28ca1 (patch)
treec12cdd071e46c9b4150edffbd024c171f94a291c
parent2a78ced9c247f5a059d8456617391e3e5c846c23 (diff)
tidy, more fusion, handle different read headers
-rw-r--r--Data/FastQ.hs22
-rw-r--r--dedumi.hs11
-rw-r--r--package.yaml5
3 files changed, 18 insertions, 20 deletions
diff --git a/Data/FastQ.hs b/Data/FastQ.hs
index 5f33d27..217d58a 100644
--- a/Data/FastQ.hs
+++ b/Data/FastQ.hs
@@ -32,23 +32,18 @@ import Streamly.Internal.Data.Unfold.Type (Unfold (..))
import qualified Streamly.Internal.FileSystem.File as File
import System.IO
import System.IO.Unsafe (unsafeInterleaveIO)
-import Prelude hiding (Read, reads)
+import Prelude hiding (Read)
data Read = Read
{ _qual :: ByteString,
- _nucs :: ByteString
+ _nucs :: ByteString,
+ _header :: ByteString
}
deriving (Eq, Show, Ord)
makeLenses ''Read
-data ReadPair = ReadPair
- { _header :: ByteString,
- _reads :: (Read, Read)
- }
- deriving (Eq, Show, Ord)
-
-makeLenses ''ReadPair
+type ReadPair = (Read, Read)
parse :: MonadIO m => FilePath -> FilePath -> Stream m ReadPair
parse l r =
@@ -66,8 +61,8 @@ parse l r =
parseEntry l r =
let [hdr, seq, "+", qual] = SB.fromArray l & BC.lines
- [_, seq', "+", qual'] = SB.fromArray r & BC.lines
- in ReadPair hdr (Read qual seq, Read qual' seq')
+ [hdr', seq', "+", qual'] = SB.fromArray r & BC.lines
+ in (Read qual seq hdr, Read qual' seq' hdr')
unparse :: FilePath -> FilePath -> Stream IO ReadPair -> IO ()
unparse l r str = do
@@ -83,9 +78,10 @@ unparse l r str = do
writeFiles l _ a BSL.Empty = BSL.hPut l a
writeFiles _ r BSL.Empty b = BSL.hPut r b
+ unparse' :: ReadPair -> (ByteString, ByteString)
unparse' read =
- ( BC.unlines [read ^. header, read ^. reads . _1 . nucs, "+", read ^. reads . _1 . qual],
- BC.unlines [read ^. header, read ^. reads . _2 . nucs, "+", read ^. reads . _2 . qual]
+ ( BC.unlines [read ^. _1 . header, read ^. _1 . nucs, "+", read ^. _1 . qual],
+ BC.unlines [read ^. _2 . header, read ^. _2 . nucs, "+", read ^. _2 . qual]
)
toLazyBS :: Stream IO (ByteString, ByteString) -> IO (BSL.ByteString, BSL.ByteString)
diff --git a/dedumi.hs b/dedumi.hs
index 01d9b37..7bf6dd4 100644
--- a/dedumi.hs
+++ b/dedumi.hs
@@ -15,7 +15,6 @@ import Data.Typeable
import Lens.Micro
import qualified Streamly.Data.Stream as S
import System.Environment
-import Prelude hiding (reads)
instance CuckooFilterHash ByteString where
cuckooHash (Salt s) = saltedFnv1aByteString s
@@ -27,13 +26,13 @@ umiLength = 8
trim x =
x
- & reads . _1 . nucs %~ B.drop umiLength
- & reads . _2 . nucs %~ B.drop umiLength
- & reads . _1 . qual %~ B.drop umiLength
- & reads . _2 . qual %~ B.drop umiLength
+ & _1 . nucs %~ B.drop umiLength
+ & _2 . nucs %~ B.drop umiLength
+ & _1 . qual %~ B.drop umiLength
+ & _2 . qual %~ B.drop umiLength
insert' f x =
- let y = B.take umiLength (x ^. reads . _1 . nucs) <> B.take umiLength (x ^. reads . _2 . nucs)
+ let y = B.take umiLength (x ^. _1 . nucs) <> B.take umiLength (x ^. _2 . nucs)
in member f y >>= \case
True -> pure True
False ->
diff --git a/package.yaml b/package.yaml
index a923f2d..4996d83 100644
--- a/package.yaml
+++ b/package.yaml
@@ -2,6 +2,7 @@ name: dedumi
dependencies:
- base
+ - fusion-plugin
- zlib
- cuckoo
- microlens-th
@@ -15,4 +16,6 @@ dependencies:
executables:
dedumi:
main: dedumi.hs
- ghc-options: [-O2, -fspec-constr-recursive=10, -fmax-worker-args=16]
+ ghc-options: [-O2, -fspec-constr-recursive=10, -fmax-worker-args=16, -fplugin=Fusion.Plugin]
+ other-modules:
+ - Data.FastQ