Sha256: 4a479b5a267acf01939f361c6cc83dec4b582682f08d0e9b70fcbe329a5938e6

Contents?: true

Size: 564 Bytes

Versions: 312

Compression:

Stored size: 564 Bytes

Contents

module DNA (nucleotideCounts) where

import Data.Map.Strict (Map, fromDistinctAscList, fromListWith, findWithDefault)

nucleotideCounts :: String -> Either String (Map Char Int)
nucleotideCounts xs = fromDistinctAscList <$> mapM count' "ACGT"
  where
    count' x = (\c -> (x, c)) <$> occur' x
    occur' x = findWithDefault 0 x . countOccurrences <$> mapM valid xs
    countOccurrences = fromListWith (+) . flip zip (repeat 1)

valid :: Char -> Either String Char
valid x
  | x `elem` "ACGT" = Right x
  | otherwise       = Left $ "invalid nucleotide " ++ show x

Version data entries

312 entries across 312 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.179 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.178 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.177 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.176 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.175 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.174 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.173 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.172 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.171 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.170 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.169 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.167 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.166 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.165 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.164 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.163 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.162 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.161 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs
trackler-2.2.1.160 tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs