hw-succinct-0.0.0.1: src/HaskellWorks/Data/Succinct/RankSelect/Internal.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module HaskellWorks.Data.Succinct.RankSelect.Internal
( -- * Rank & Select
Rank(..)
, Select(..)
) where
import HaskellWorks.Data.Positioning
import HaskellWorks.Data.Succinct.RankSelect.Binary.Basic
class Eq a => Rank v a where
rank :: a -> v -> Count -> Count
class Eq a => Select v a where
select :: a -> v -> Count -> Count
instance Rank [Bool] Bool where
rank a = if a then rank1 else rank0
{-# INLINABLE rank #-}
instance Select [Bool] Bool where
select a = if a then select1 else select0
{-# INLINABLE select #-}