Lists with a focused element
|LTS Haskell 20.15:||0.1.1.0|
|Stackage Nightly 2023-03-24:||0.1.1.0|
|Latest on Hackage:||0.1.1.0|
Maintained by firstname.lastname@example.org
This version can be pinned in stack with:
Module documentation for 0.1.1.0
Depends on 7 packages(full list with versions):
Used by 2 packages in nightly-2023-02-03(full list with versions):
FocusList is a sequence of elements which has one element as its
supports quick insertion and indexing by its implementation with
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.
Here is a short example of using
module Main where import Data.FocusList ( Focus(Focus), FocusList, appendFL, fromListFL, getFocusItemFL, prependFL , singletonFL ) import Data.Foldable (toList) -- | Create a new 'FocusList' from a list. You must set the 'Focus' of the new -- 'FocusList'. The 'Focus' is counting from zero, so the @goat@ element should -- have the 'Focus'. -- -- If you try to specify a 'Focus' out of range from the input list, -- 'fromListFL' will return 'Nothing'. myFocusList :: Maybe (FocusList String) myFocusList = fromListFL (Focus 2) ["hello", "bye", "goat", "dog"] -- | You can get the focused element from an existing 'FocusList' -- -- If the 'FocusList' is empty, this returns 'Nothing'. myFocusElement :: FocusList String -> Maybe String myFocusElement focuslist = getFocusItemFL focuslist -- | You can append to either side of a 'FocusList'. -- -- 'singletonFL' creates a 'FocusList' with a single element. -- That single element will have the 'Focus'. -- -- 'myFocusListAppended' will have a value of -- @FocusList (Focus 1) ["bye", "hello", "foobar"]@ myFocusListAppended :: FocusList String myFocusListAppended = prependFL "bye" (appendFL (singletonFL "hello") "foobar") -- | 'FocusList' is an instance of 'Functor' and 'Foldable', so you can use -- functions like 'fmap' and 'toList' on a 'FocusList'. 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))
Changelog for focuslist
- Add functions
Update to allow the latest version of genvalidity (#8). Thanks George Wilson!
Add some lower version bounds to dependencies.
- Enables older GHC versions for Travis
- Initial release.