Skip to content

Things To Do

Harendra Kumar edited this page Oct 18, 2017 · 22 revisions

Documentation

  • Update documentation
  • Add a tutorial/user guide with detailed use cases, examples

Examples

  • Update existing examples
  • Cover all main use cases and organize them systematically
  • Add some FRP/SDL examples/games

Testing

  • Test exception handling
  • 100% coverage

APIs

  • Add missing APIs
  • foldr or Foldable instance
  • left fold function for use with the foldl library

Features

High priority

  • Cross thread recursion
  • Test real parallel processing and scaling, investigate if any memory barriers are needed for CAS stuff.
  • Measure lock contentions, an option to dequeue work and run in batches instead of one at a time to reduce lock contention?
  • Buffering, rate control: Bounded push queue size and API for that
  • Test exception handling, resource cleanup at exception
  • Automaton instance for machines
  • Cancel dropped tasks (e.g. after take 1)

Low priority

  • Use cases of parallel stream merging, sampling, buffering
  • Do we need a Alternative that is dual to the current default i.e. race or just use take 1?
  • Explore Kleisli Profunctor and Kleisli Arrow instances?
  • Free applicative and Free Alternative, batched Alternative (push scheduling instead of pull scheduling)
  • N-ary operations e.g. real balanced interleave
  • Scheduling: Coalescing of tasks based on programmer defined criteria
    • Batching based on the target host
    • Batching/chunking for parallel/distributed execution
    • Batching iterations
  • Controlled parallelism:
    • Control based on the level in the tree
    • Control based on the CPU/IO utilization based pacing
    • Utilize non-blocking IO
  • Pause and resume using monad-recorder
  • Save internal buffered state during a pause?
Clone this wiki locally