FocusList

A FocusList
is a sequence of elements which has one element as its Focus
. It
supports quick insertion and indexing by its implementation with
Seq
.
The focuslist package is similar to pointed-list or list-zipper. Focuslist however is optimised for fast indexing and insertion at any point, and can be empty. For operations where linked lists perform better the other packages are likely to be superior, though for other operations focuslist is likely to be faster.
Example
Here is a short example of using FocusList
.
module Main where
import Data.FocusList
( Focus(Focus), FocusList, appendFL, fromListFL, getFocusItemFL, prependFL
, singletonFL
)
import Data.Foldable (toList)
myFocusList :: Maybe (FocusList String)
myFocusList = fromListFL (Focus 2) ["hello", "bye", "goat", "dog"]
myFocusElement :: FocusList String -> Maybe String
myFocusElement focuslist = getFocusItemFL focuslist
myFocusListAppended :: FocusList String
myFocusListAppended =
prependFL "bye" (appendFL (singletonFL "hello") "foobar")
fmapAndConvertToList :: FocusList Int -> [String]
fmapAndConvertToList focuslist = toList (fmap show focuslist)
main :: IO ()
main = do
putStrLn "myFocusList:"
print myFocusList
putStrLn "\nmyFocusListAppended:"
print myFocusListAppended
putStrLn "\nmyFocusElement myFocusListAppended:"
print (myFocusElement myFocusListAppended)
putStrLn "\nfmap length myFocusListAppended:"
print (fmap length myFocusListAppended)
putStrLn "\nfmapAndConvertToList (fmap length myFocusListAppended):"
print (fmapAndConvertToList (fmap length myFocusListAppended))
Maintainers