Sha256: 1e0b7fe6c81068cd7e99bd3196f118060eb1320a19f39b97b314b60f88a524af

Contents?: true

Size: 795 Bytes

Versions: 45

Compression:

Stored size: 795 Bytes

Contents

module Series (slices) where

import Control.Applicative   (liftA2)
import Control.Monad         (guard)
import Data.ByteString.Char8 (ByteString, foldr, length, tails, take)
import Data.Function         (on)
import Data.Maybe            (mapMaybe)
import Data.Sequence         (Seq, empty, fromList, (<|))
import Prelude        hiding (foldr, length, take)

slices :: Num a => Int -> ByteString -> Seq (Seq a)
slices n = fromList
         . mapMaybe toDigits
         . takeWhile ((== n) . length)
         . map (take n)
         . tails

toDigits :: Num a => ByteString -> Maybe (Seq a)
toDigits = foldr (liftA2 (<|) . toDigit) (Just empty)

toDigit :: Num a => Char -> Maybe a
toDigit x = guard (0 <= dec && dec <= 9) >> return (fromIntegral dec)
  where
    dec = ((-) `on` fromEnum) x '0'

Version data entries

45 entries across 45 versions & 1 rubygems

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