packages feed

liquidhaskell-0.8.10.7: benchmarks/text-0.11.2.3/Data/Text/Fusion-debug.hs

{-# LANGUAGE BangPatterns, MagicHash #-}

-- FAST
module Data.Text.Fusion (mapAccumL) where

-- SLOW module Data.Text.Fusion where

import Prelude (Bool(..), Char, Maybe(..), Monad(..), Int,
                Num(..), Ord(..), ($), (&&),
                fromIntegral, otherwise, undefined)
import Data.Bits ((.&.))
import Data.Text.Internal (Text(..))
import Data.Text.Private (runText)
import Data.Text.UnsafeChar (ord, unsafeChr, unsafeWrite)
import Data.Text.UnsafeShift (shiftL, shiftR)
import qualified Data.Text.Array as A
import qualified Data.Text.Fusion.Common as S
import Data.Text.Fusion.Internal
import Data.Text.Fusion.Size
import qualified Data.Text.Internal as I
import qualified Data.Text.Encoding.Utf16 as U16

import GHC.ST (ST, runST)
import Language.Haskell.Liquid.Prelude

default (Int)

{-@ fst :: (a, b) -> a @-}
fst :: (a, b) -> a
fst = undefined

{-@ snd :: (a, b) -> b @-}
snd :: (a, b) -> b
snd = undefined

mapAccumL :: (a -> Char -> (a, Char)) -> a -> Stream Char -> (a, Text)
mapAccumL f z0 (Stream next0 s0 len) = (nz, I.textP na 0 nl)
  where
    mlen  = upperBound 4 len
    na    = fst blob
    nz    = fst (snd blob)
    nl    = snd (snd blob)
    -- (na, (nz, nl))
    blob
        = runST
                       ( do arrBLOB0  <- A.new mlen
                            (marr, x) <- outerL f next0 arrBLOB0 mlen z0 s0 0
                            arr       <- A.unsafeFreeze marr
                            return (arr, x) )

-- SLOW
{-@
  outerL :: (b -> t1 -> (b, Char))
            -> (t -> Step t t1)
            -> A.MArray s
            -> Int
            -> b
            -> t
            -> Int
            -> ST s (A.MArray s, (b, Int))
  @-}

-- FAST
outerL :: (b -> t1 -> (b, Char))
           -> (t -> Step t t1)
           -> A.MArray s
           -> Int
           -> b
           -> t
           -> Int
           -> ST s (A.MArray s, (b, Int))

outerL = undefined