module Data.NonEmptyTest where
import qualified Data.NonEmpty.Mixed as NonEmptyMixed
import qualified Data.NonEmptyPrivate as NonEmpty
import Control.Monad (guard, )
import qualified Data.List.HT as ListHT
import Data.Tuple.HT (mapFst, )
foldBalanced :: NonEmpty.T [] Integer -> Bool
foldBalanced xs =
NonEmpty.foldBalanced (+) xs == NonEmpty.sum xs
filterToInfixesAlt :: (a -> Bool) -> [a] -> [NonEmpty.T [] a]
filterToInfixesAlt p =
snd .
foldr
(\x ~(b1, yt) ->
let b0 = p x
in (b0,
if b0
then uncurry (:) $
mapFst (NonEmpty.cons x) $
case guard b1 >> ListHT.viewL yt of
Just (y,ys) -> (NonEmpty.flatten y, ys)
Nothing -> ([], yt)
else yt))
(True, [])
filterToInfixes :: [Int] -> Bool
filterToInfixes xs =
NonEmptyMixed.filterToInfixes (>0) xs == filterToInfixesAlt (>0) xs