focuslist: Lists with a focused element

[ bsd3, library, text ] [ Propose Tags ]

Please see README.md.


[Skip to Readme]
Versions [faq] 0.1.0.0, 0.1.0.1
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
Revised Revision 2 made by JosefThorne at Mon Dec 3 14:39:11 UTC 2018
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
Uploaded by JosefThorne at Sun Dec 2 01:59:24 UTC 2018
Distributions Debian:0.1.0.1, LTSHaskell:0.1.0.1, NixOS:0.1.0.1, Stackage:0.1.0.1
Executables focuslist-readme
Downloads 225 total (64 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2018-12-02 [all 1 reports]

Modules

[Index] [Quick Jump]

Flags

NameDescriptionDefaultType
buildreadme

Build the example from the README.md file. This is normally only used for testing.

DisabledAutomatic

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees


Readme for focuslist-0.1.0.1

[back to package description]

FocusList

Build Status Hackage Stackage LTS Stackage Nightly BSD3 license

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.

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))

Maintainers