Skip to content

Things To Do

Harendra Kumar edited this page Sep 22, 2017 · 22 revisions

Documentation

  • Update documentation
  • Add a tutorial

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
  • zip API?

Features

  • Cross thread recursion
  • Parallel applicative?
  • Write a parallel mergesort example, merging two infinite but sorted streams.
  • Other use cases of parallel stream merging, sampling, buffering
  • Free applicative and Free Alternative, batched Alternative (push scheduling instead of pull scheduling)
  • Cancel dropped tasks (e.g. take 1)
  • Do we need a Alternative that is dual to the current default i.e. race or just use take 1?
  • Pause and resume using monad-recorder
  • Save internal buffered state during a pause?
  • An option to dequeue and run in batches instead of one at a time to reduce lock contention?
  • 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:
    • Buffering: Bounded push queue size and API for that
    • Control based on the level in the tree
    • Control based on the CPU/IO utilization based pacing
    • Utilize non-blocking IO
  • Explore Kleisli Profunctor and Kleisli Arrow instances
  • Automaton instance for machines

Refactoring

  • Use a foldr library (https://hackage.haskell.org/package/folds?) like the foldl library to facilitate the upstream state passing across folded items. This should generalise the upstream context sharing as implemented in asyncly.
Clone this wiki locally