module Data.List.Index (
module Data.Index,
module Data.List.Index
) where
import Data.Index
import Prelude hiding ((!!), take, drop, splitAt)
import qualified Data.List as List
(!!) :: [a] -> Index [] Int -> a
t !! idx = run t $ do
i <- idx
return $ t List.!! i
take :: Index [] Int -> [a] -> [a]
take idx t = run t $ do
i <- idx
return $ List.take i t
drop :: Index [] Int -> [a] -> [a]
drop idx t = run t $ do
i <- idx
return $ List.drop i t
splitAt :: Index [] Int -> [a] -> ([a], [a])
splitAt idx t = run t $ do
i <- idx
return $ List.splitAt i t