| CARVIEW |
Select Language
HTTP/1.1 200 OK
Connection: keep-alive
Server: nginx/1.24.0 (Ubuntu)
Content-Type: text/html; charset=utf-8
Cache-Control: public, max-age=300
Content-Encoding: gzip
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Age: 0
Date: Sat, 17 Jan 2026 04:58:52 GMT
X-Served-By: cache-dfw-ktki8620079-DFW, cache-bom-vanm7210063-BOM
X-Cache: MISS, MISS
X-Cache-Hits: 0, 0
X-Timer: S1768625932.635403,VS0,VE789
Vary: Accept, Accept-Encoding
transfer-encoding: chunked
focuslist: Lists with a focused element
focuslist: Lists with a focused element
Flags
Automatic Flags
| Name | Description | Default |
|---|---|---|
| buildreadme | Build the example from the README.md file. This is normally only used for testing. | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- focuslist-0.1.1.0.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
| Versions [RSS] | 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.1.0 |
|---|---|
| Change log | CHANGELOG.md |
| Dependencies | base (>=4.9 && <5), containers (>=0.5.8), focuslist, lens (>=4.16), markdown-unlit, mono-traversable, QuickCheck (>=2.11.3) [details] |
| License | BSD-3-Clause |
| Copyright | 2017-2018 Dennis Gosnell |
| Author | Dennis Gosnell and Grendel-Grendel-Grendel |
| Maintainer | cdep.illabout@gmail.com |
| Uploaded | by cdepillabout at 2022-01-04T02:27:09Z |
| Category | Text |
| Home page | https://github.com/cdepillabout/focuslist |
| Source repo | head: git clone https://github.com/cdepillabout/focuslist/ head: git clone git@github.com:cdepillabout/focuslist.git |
| Distributions | Debian:0.1.0.2, LTSHaskell:0.1.1.0, NixOS:0.1.1.0, Stackage:0.1.1.0 |
| Reverse Dependencies | 1 direct, 0 indirect [details] |
| Executables | focuslist-readme |
| Downloads | 2644 total (18 in the last 30 days) |
| Rating | (no votes yet) [estimated by Bayesian average] |
| Your Rating |
|
| Status | Docs available [build log] Last success reported on 2022-01-04 [all 1 reports] |
Readme for focuslist-0.1.1.0
[back to package description]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)
-- | 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))