4synopsis: Dataflow programming and declarative concurrency
6 Browse the documentation at https://streamly.composewell.com.
8 Streamly is a streaming framework to build reliable and scalable
9 software systems from modular building blocks using dataflow
10 programming and declarative concurrency. Stream fusion optimizations
11 in streamly result in high-performance, modular combinatorial
14 Performance with simplicity:
16 * Performance on par with C (<https://github.com/composewell/streaming-benchmarks Benchmarks>)
17 * API close to standard Haskell lists (<https://github.com/composewell/streamly-examples Examples>)
18 * Declarative concurrency with automatic scaling
19 * Filesystem, fsnotify, network, and Unicode support included
20 * More functionality provided via many ecosystem packages
22 Unified and powerful abstractions:
24 * Unifies unfolds, arrays, folds, and parsers with streaming
25 * Unifies @Data.List@, @list-t@, and @logict@ with streaming
26 * Unifies concurrency with standard streaming abstractions
27 * Provides time-domain combinators for reactive programming
28 * Interworks with bytestring and streaming libraries
30homepage: https://streamly.composewell.com
31bug-reports: https://github.com/composewell/streamly/issues
34tested-with: GHC==8.4.4
40author: Composewell Technologies
41maintainer: streamly@composewell.com
42copyright: 2017 Composewell Technologies
44 Streamly, Concurrency, Streaming, Dataflow, Pipes, Reactivity, List,
45 Logic, Non-determinism, Parsing, Array, Time, Unicode, Filesystem,
52 benchmark/bench-runner/Main.hs
53 benchmark/bench-runner/bench-runner.cabal
54 benchmark/Streamly/Benchmark/Data/*.hs
55 benchmark/Streamly/Benchmark/Data/Array/Common.hs
56 benchmark/Streamly/Benchmark/Data/Array/CommonImports.hs
57 benchmark/Streamly/Benchmark/Data/Array/SmallArray.hs
58 benchmark/Streamly/Benchmark/Data/Array/Foreign.hs
59 benchmark/Streamly/Benchmark/Data/Array/Foreign/Mut.hs
60 benchmark/Streamly/Benchmark/Data/Array/Prim.hs
61 benchmark/Streamly/Benchmark/Data/Array/Prim/Pinned.hs
62 benchmark/Streamly/Benchmark/Data/Array/Stream/Foreign.hs
63 benchmark/Streamly/Benchmark/Data/Fold/Window.hs
64 benchmark/Streamly/Benchmark/Data/Parser/*.hs
65 benchmark/Streamly/Benchmark/Data/Stream/*.hs
66 benchmark/Streamly/Benchmark/FileSystem/*.hs
67 benchmark/Streamly/Benchmark/FileSystem/Handle/*.hs
68 benchmark/Streamly/Benchmark/Prelude/*.hs
69 benchmark/Streamly/Benchmark/Prelude/Serial/*.hs
70 benchmark/Streamly/Benchmark/Unicode/*.hs
71 benchmark/lib/Streamly/Benchmark/*.hs
72 benchmark/lib/Streamly/Benchmark/Common/*.hs
73 benchmark/streamly-benchmarks.cabal
79 docs/streamly-docs.cabal
80 targets/streamly-targets.cabal
82 test/test-runner/Main.hs
83 test/test-runner/test-runner.cabal
86 src/Streamly/Internal/Data/Stream/Instances.hs
87 src/Streamly/Internal/Data/Array/ArrayMacros.h
89 src/Streamly/Internal/Data/Array/PrimInclude.hs
90 src/Streamly/Internal/Data/Array/Prim/TypesInclude.hs
91 src/Streamly/Internal/Data/Array/Prim/MutTypesInclude.hs
92 src/Streamly/Internal/FileSystem/Event/Darwin.h
95 test/Streamly/Test/Data/*.hs
96 test/Streamly/Test/Data/Array/CommonImports.hs
97 test/Streamly/Test/Data/Array/Common.hs
98 test/Streamly/Test/Data/Array/Prim.hs
99 test/Streamly/Test/Data/Array/Prim/Pinned.hs
100 test/Streamly/Test/Data/Array/Foreign.hs
101 test/Streamly/Test/Data/Array/Stream/Foreign.hs
102 test/Streamly/Test/Data/Parser/ParserD.hs
103 test/Streamly/Test/FileSystem/Event.hs
104 test/Streamly/Test/FileSystem/Event/Common.hs
105 test/Streamly/Test/FileSystem/Event/Darwin.hs
106 test/Streamly/Test/FileSystem/Event/Windows.hs
107 test/Streamly/Test/FileSystem/Event/Linux.hs
108 test/Streamly/Test/FileSystem/Handle.hs
109 test/Streamly/Test/Network/Socket.hs
110 test/Streamly/Test/Network/Inet/TCP.hs
111 test/Streamly/Test/Prelude.hs
112 test/Streamly/Test/Prelude/*.hs
113 test/Streamly/Test/Unicode/*.hs
114 test/Streamly/Test/Data/Fold/*.hs
115 test/lib/Streamly/Test/Common.hs
116 test/lib/Streamly/Test/Prelude/Common.hs
117 test/streamly-tests.cabal
118 test/version-bounds.hs
119 test/Streamly/Test/Unicode/ucd/NormalizationTest.txt
120 test/Streamly/Test/Unicode/extra/NormalizationTest.txt
121 benchmark/Streamly/Benchmark/Unicode/data/AllChars.txt
122 benchmark/Streamly/Benchmark/Unicode/data/Devanagari.txt
123 benchmark/Streamly/Benchmark/Unicode/data/Japanese.txt
124 benchmark/Streamly/Benchmark/Unicode/data/Vietnamese.txt
125 benchmark/Streamly/Benchmark/Unicode/data/Deutsch.txt
126 benchmark/Streamly/Benchmark/Unicode/data/English.txt
127 benchmark/Streamly/Benchmark/Unicode/data/Korean.txt
129 -- Include streamly-core when packaging
130 -- This is temporary as we will soon break this package out
133 core/src/Streamly/Internal/Data/Stream/Instances.hs
134 core/src/Streamly/Internal/Data/Array/ArrayMacros.h
136 core/src/Streamly/Internal/Data/Time/Clock/config-clock.h
138 core/src/Streamly/Internal/BaseCompat.hs
139 core/src/Streamly/Internal/Control/Exception.hs
140 core/src/Streamly/Internal/Control/Monad.hs
141 core/src/Streamly/Internal/Control/ForkIO.hs
142 core/src/Streamly/Internal/Data/Cont.hs
143 core/src/Streamly/Internal/Foreign/Malloc.hs
144 core/src/Streamly/Internal/System/IO.hs
145 core/src/Streamly/Internal/Data/IsMap.hs
146 core/src/Streamly/Internal/Data/Tuple/Strict.hs
147 core/src/Streamly/Internal/Data/Maybe/Strict.hs
148 core/src/Streamly/Internal/Data/Either/Strict.hs
149 core/src/Streamly/Internal/Control/Concurrent.hs
150 core/src/Streamly/Internal/Control/ForkLifted.hs
151 core/src/Streamly/Internal/Data/IOFinalizer.hs
152 core/src/Streamly/Internal/Data/Time/TimeSpec.hsc
153 core/src/Streamly/Internal/Data/Time/Units.hs
154 core/src/Streamly/Internal/Data/Time/Clock/Type.hsc
155 core/src/Streamly/Internal/Data/Time/Clock.hs
156 core/src/Streamly/Internal/Data/SVar/Type.hs
157 core/src/Streamly/Internal/Data/Stream/StreamK/Type.hs
158 core/src/Streamly/Internal/Data/Fold/Step.hs
159 core/src/Streamly/Internal/Data/Refold/Type.hs
160 core/src/Streamly/Internal/Data/Fold/Type.hs
161 core/src/Streamly/Internal/Data/Stream/StreamD/Step.hs
162 core/src/Streamly/Internal/Data/Stream/StreamD/Type.hs
163 core/src/Streamly/Internal/Data/Stream/StreamDK/Type.hs
164 core/src/Streamly/Internal/Data/Unfold/Type.hs
165 core/src/Streamly/Internal/Data/Producer/Type.hs
166 core/src/Streamly/Internal/Data/Producer.hs
167 core/src/Streamly/Internal/Data/Producer/Source.hs
168 core/src/Streamly/Internal/Data/Parser/ParserK/Type.hs
169 core/src/Streamly/Internal/Data/Parser/ParserD/Type.hs
170 core/src/Streamly/Internal/Data/Pipe/Type.hs
171 core/src/Streamly/Internal/Data/IORef/Prim.hs
172 core/src/Streamly/Internal/Data/Array/Foreign/Mut/Type.hs
173 core/src/Streamly/Internal/Data/Array/Foreign/Mut.hs
174 core/src/Streamly/Internal/Data/Array/Foreign/Type.hs
175 core/src/Streamly/Internal/Data/Array/Mut/Type.hs
176 core/src/Streamly/Internal/Data/Stream/StreamD/Generate.hs
177 core/src/Streamly/Internal/Data/Stream/StreamD/Eliminate.hs
178 core/src/Streamly/Internal/Data/Stream/StreamD/Nesting.hs
179 core/src/Streamly/Internal/Data/Stream/StreamD/Transform.hs
180 core/src/Streamly/Internal/Data/Stream/StreamD/Exception.hs
181 core/src/Streamly/Internal/Data/Stream/StreamD/Lift.hs
182 core/src/Streamly/Internal/Data/Stream/StreamD.hs
183 core/src/Streamly/Internal/Data/Stream/StreamDK.hs
184 core/src/Streamly/Internal/Data/Stream/Common.hs
185 core/src/Streamly/Internal/Data/Parser/ParserD/Tee.hs
186 core/src/Streamly/Internal/Data/Parser/ParserD.hs
187 core/src/Streamly/Internal/Data/Unfold.hs
188 core/src/Streamly/Internal/Data/Unfold/Enumeration.hs
189 core/src/Streamly/Internal/Data/Fold/Tee.hs
190 core/src/Streamly/Internal/Data/Fold.hs
192 core/src/Streamly/Internal/Data/Parser.hs
193 core/src/Streamly/Internal/Data/Pipe.hs
194 core/src/Streamly/Internal/Data/Stream/Serial.hs
195 core/src/Streamly/Internal/Data/Stream/WSerial.hs
196 core/src/Streamly/Internal/Data/Stream/Zip.hs
197 core/src/Streamly/Internal/Data/List.hs
198 core/src/Streamly/Internal/Data/Array.hs
199 core/src/Streamly/Internal/Data/Array/Foreign.hs
200 core/src/Streamly/Internal/Data/Array/Stream/Mut/Foreign.hs
201 core/src/Streamly/Internal/Data/Array/Stream/Fold/Foreign.hs
202 core/src/Streamly/Internal/Data/Ring/Foreign.hs
203 core/src/Streamly/Internal/Data/Ring.hs
204 core/src/Streamly/Internal/Data/Stream/StreamK.hs
205 core/src/Streamly/Data/Fold.hs
206 core/src/Streamly/Data/Fold/Tee.hs
207 core/src/Streamly/Internal/Data/Fold/Window.hs
208 core/src/Streamly/Data/Array/Foreign.hs
209 core/src/Streamly/Internal/Data/Time/Clock/Darwin.c
210 core/src/Streamly/Internal/Data/Time/Clock/Windows.c
211 core/streamly-core.cabal
220 docs/Developer/Benchmarks.md
228 docs/User/Tutorials/*.md
229 docs/User/Tutorials/*.hs
231 docs/User/HowTo/*.svg
232 docs/User/Explanatory/*.md
233 docs/User/Explanatory/streaming-pradigms.rst
234 docs/User/ProjectRelated/*.md
235 docs/User/ProjectRelated/Roadmap.link
236 docs/User/ProjectRelated/API-changelog.txt
238 docs/Developer/Tests.md
246source-repository head
248 location: https://github.com/composewell/streamly
251 description: Use fusion plugin for benchmarks and executables
256 description: Enable inspection testing
261 description: Debug build with asserts enabled
266 description: Development build
271 description: Use llvm backend for code generation
276 description: Use CPS style streams when possible
281 description: Use C malloc instead of GHC malloc
286 description: off=GHC default, on=-O2
291 description: Limits memory when building
295-------------------------------------------------------------------------------
297-------------------------------------------------------------------------------
299common compile-options
300 default-language: Haskell2010
303 cpp-options: -DCABAL_OS_DARWIN
306 cpp-options: -DCABAL_OS_LINUX
309 cpp-options: -DCABAL_OS_WINDOWS
312 cpp-options: -DUSE_STREAMK_ONLY
315 cpp-options: -DDEVBUILD
318 cpp-options: -DINSPECTION
320 if flag(use-c-malloc)
321 cpp-options: -DUSE_C_MALLOC
325 -Wunrecognised-warning-flags
327 -Wincomplete-record-updates
328 -Wincomplete-uni-patterns
329 -Wredundant-constraints
330 -Wnoncanonical-monad-instances
331 -Wmissing-export-lists
338 ghc-options: -Wmissed-specialisations
339 -Wall-missed-specialisations
341 if flag(limit-build-mem)
342 ghc-options: +RTS -M1000M -RTS
344common default-extensions
353 ExistentialQuantification
356 GeneralizedNewtypeDeriving
361 MultiParamTypeClasses
371 -- MonoLocalBinds, enabled by TypeFamilies, causes performance
372 -- regressions. Disable it. This must come after TypeFamilies,
373 -- otherwise TypeFamilies will enable it again.
376 -- UndecidableInstances -- Does not show any perf impact
377 -- UnboxedTuples -- interferes with (#.)
379common optimization-options
383 -fspec-constr-recursive=16
386 -- For this to be effective it must come after the -O2 option
387 if flag(dev) || flag(debug) || !flag(opt)
388 ghc-options: -fno-ignore-asserts
390common threading-options
391 ghc-options: -threaded
394-- We need optimization options here to optimize internal (non-inlined)
395-- versions of functions. Also, we have some benchmarking inspection tests
396-- part of the library when built with --benchmarks flag. Thos tests fail
397-- if we do not use optimization options here. It was observed that due to
398-- -O2 here some concurrent/nested benchmarks improved and others regressed.
399-- We can investigate a bit more here why the regression occurred.
401 import: compile-options, optimization-options, default-extensions
403-------------------------------------------------------------------------------
405-------------------------------------------------------------------------------
411 default-extensions: QuantifiedConstraints
415 , src/Streamly/Internal/Data/Stream
416 , src/Streamly/Internal/Data/Array
420 -- Internal modules, listed roughly in bottom up
421 -- dependency order To view dependency graph:
422 -- graphmod | dot -Tps > deps.ps
424 -- XXX To be moved to streamly-core
427 -- XXX To be removed or put under dev flag
428 , Streamly.Internal.Data.Array.Prim.Mut.Type
429 , Streamly.Internal.Data.Array.Prim.Type
430 , Streamly.Internal.Data.Array.Prim.Pinned.Mut.Type
431 , Streamly.Internal.Data.Array.Prim.Pinned.Type
432 , Streamly.Internal.Data.SmallArray.Type
433 , Streamly.Internal.Data.Array.Prim
434 , Streamly.Internal.Data.Array.Prim.Pinned
435 , Streamly.Internal.Data.SmallArray
437 -- streamly-concurrent
438 , Streamly.Internal.Data.Atomics
439 , Streamly.Internal.Data.SVar.Worker
440 , Streamly.Internal.Data.SVar.Dispatch
441 , Streamly.Internal.Data.SVar.Pull
442 , Streamly.Internal.Data.SVar
444 , Streamly.Internal.Data.Unfold.SVar
445 , Streamly.Internal.Data.Fold.SVar
446 , Streamly.Internal.Data.Fold.Async
447 , Streamly.Internal.Data.Stream.SVar.Generate
448 , Streamly.Internal.Data.Stream.SVar.Eliminate
450 , Streamly.Internal.Data.Stream.Async
451 , Streamly.Internal.Data.Stream.Parallel
452 , Streamly.Internal.Data.Stream.Ahead
453 , Streamly.Internal.Data.Stream.ZipAsync
455 , Streamly.Internal.Data.Stream.IsStream.Type
456 , Streamly.Internal.Data.Stream.IsStream.Combinators
457 , Streamly.Internal.Data.Stream.IsStream.Common
458 , Streamly.Internal.Data.Stream.IsStream.Enumeration
459 , Streamly.Internal.Data.Stream.IsStream.Generate
460 , Streamly.Internal.Data.Stream.IsStream.Eliminate
461 , Streamly.Internal.Data.Stream.IsStream.Transform
462 , Streamly.Internal.Data.Stream.IsStream.Expand
463 , Streamly.Internal.Data.Stream.IsStream.Reduce
464 , Streamly.Internal.Data.Stream.IsStream.Exception
465 , Streamly.Internal.Data.Stream.IsStream.Lift
466 , Streamly.Internal.Data.Stream.IsStream.Top
467 , Streamly.Internal.Data.Stream.IsStream
469 , Streamly.Internal.Data.Array.Stream.Foreign
472 , Streamly.Internal.Data.Binary.Decode
475 , Streamly.Internal.Unicode.Stream
476 , Streamly.Internal.Unicode.Utf8
477 , Streamly.Internal.Unicode.Char
478 , Streamly.Internal.Unicode.Char.Parser
479 , Streamly.Internal.Unicode.Array.Char
480 , Streamly.Internal.Unicode.Array.Prim.Pinned
482 -- streamly-filesystem
483 , Streamly.Internal.System.IOVec.Type
484 , Streamly.Internal.System.IOVec
485 , Streamly.Internal.FileSystem.Handle
486 , Streamly.Internal.FileSystem.Dir
487 , Streamly.Internal.FileSystem.File
488 , Streamly.Internal.FileSystem.FDIO
489 , Streamly.Internal.FileSystem.FD
492 , Streamly.Internal.Console.Stdio
495 , Streamly.Internal.Network.Socket
496 , Streamly.Internal.Network.Inet.TCP
502 , Streamly.Unicode.Stream
505 , Streamly.FileSystem.Handle
506 , Streamly.Console.Stdio
509 , Streamly.Network.Socket
510 , Streamly.Network.Inet.TCP
514 , Streamly.Data.Unicode.Stream
515 , Streamly.Memory.Array
518 -- Re-exported modules, listed in the order described in
522 Streamly.Internal.BaseCompat
523 , Streamly.Internal.Control.Exception
524 , Streamly.Internal.Control.Monad
525 , Streamly.Internal.Control.ForkIO
526 , Streamly.Internal.Data.Cont
527 , Streamly.Internal.Foreign.Malloc
528 , Streamly.Internal.System.IO
530 -- streamly-strict-data
531 , Streamly.Internal.Data.Tuple.Strict
532 , Streamly.Internal.Data.Maybe.Strict
533 , Streamly.Internal.Data.Either.Strict
535 -- XXX Depends on monad-control or unliftio-core
536 , Streamly.Internal.Control.Concurrent
537 , Streamly.Internal.Control.ForkLifted
538 , Streamly.Internal.Data.IOFinalizer
541 , Streamly.Internal.Data.Time.TimeSpec
542 , Streamly.Internal.Data.Time.Units
543 , Streamly.Internal.Data.Time.Clock.Type
544 , Streamly.Internal.Data.Time.Clock
546 -- streamly-core-stream-types
547 , Streamly.Internal.Data.SVar.Type
548 , Streamly.Internal.Data.Stream.StreamK.Type
549 , Streamly.Internal.Data.Fold.Step
550 , Streamly.Internal.Data.Refold.Type
551 , Streamly.Internal.Data.Fold.Type
552 , Streamly.Internal.Data.Stream.StreamD.Step
553 , Streamly.Internal.Data.Stream.StreamD.Type
554 , Streamly.Internal.Data.Stream.StreamDK.Type
555 , Streamly.Internal.Data.Unfold.Type
556 , Streamly.Internal.Data.Producer.Type
557 , Streamly.Internal.Data.Producer
558 , Streamly.Internal.Data.Producer.Source
560 , Streamly.Internal.Data.Parser.ParserK.Type
561 , Streamly.Internal.Data.Parser.ParserD.Type
562 , Streamly.Internal.Data.Pipe.Type
564 -- streamly-core-array-types
566 -- XXX Depends on primitive
567 , Streamly.Internal.Data.IORef.Prim
568 -- May depend on streamly-core-stream
569 , Streamly.Internal.Data.Array.Foreign.Mut.Type
570 , Streamly.Internal.Data.Array.Foreign.Mut
571 , Streamly.Internal.Data.Array.Foreign.Type
572 , Streamly.Internal.Data.Array.Mut.Type
574 -- streamly-core-streams
575 -- StreamD depends on streamly-array-types
576 , Streamly.Internal.Data.Stream.StreamD.Generate
577 , Streamly.Internal.Data.Stream.StreamD.Eliminate
578 , Streamly.Internal.Data.Stream.StreamD.Nesting
579 , Streamly.Internal.Data.Stream.StreamD.Transform
580 , Streamly.Internal.Data.Stream.StreamD.Exception
581 , Streamly.Internal.Data.Stream.StreamD.Lift
582 , Streamly.Internal.Data.Stream.StreamD
583 , Streamly.Internal.Data.Stream.StreamDK
584 , Streamly.Internal.Data.Stream.Common
585 , Streamly.Internal.Data.Parser.ParserD.Tee
586 , Streamly.Internal.Data.Parser.ParserD
588 -- streamly-core-data
589 , Streamly.Internal.Data.Unfold
590 , Streamly.Internal.Data.Unfold.Enumeration
591 , Streamly.Internal.Data.Fold.Tee
592 , Streamly.Internal.Data.Fold
593 , Streamly.Internal.Data.Fold.Window
594 , Streamly.Internal.Data.Parser
595 , Streamly.Internal.Data.Pipe
596 , Streamly.Internal.Data.Stream.Serial
597 , Streamly.Internal.Data.Stream.Zip
598 , Streamly.Internal.Data.List
600 -- streamly-core-data-arrays
601 -- XXX Depends on primitive
602 , Streamly.Internal.Data.Array
603 , Streamly.Internal.Data.Array.Foreign
604 , Streamly.Internal.Data.Array.Stream.Mut.Foreign
605 , Streamly.Internal.Data.Array.Stream.Fold.Foreign
608 , Streamly.Internal.Data.Ring.Foreign
609 -- XXX Depends on primitive
610 , Streamly.Internal.Data.Ring
612 -- Only used for benchmarks
613 , Streamly.Internal.Data.Stream.StreamK
615 -- streamly-core exposed modules
617 , Streamly.Data.Fold.Tee
618 , Streamly.Data.Array.Foreign
622 , Streamly.Data.Prim.Array
623 , Streamly.Data.SmallArray
626 exposed-modules: Streamly.Internal.FileSystem.Event.Windows
629 include-dirs: src/Streamly/Internal
630 c-sources: src/Streamly/Internal/FileSystem/Event/Darwin.m
631 exposed-modules: Streamly.Internal.FileSystem.Event.Darwin
634 exposed-modules: Streamly.Internal.FileSystem.Event.Linux
636 if os(linux) || os(darwin) || os(windows)
637 exposed-modules: Streamly.Internal.FileSystem.Event
640 -- Core libraries shipped with ghc, the min and max
641 -- constraints of these libraries should match with
642 -- the GHC versions we support. This is to make sure that
643 -- packages depending on the "ghc" package (packages
644 -- depending on doctest is a common example) can
645 -- depend on streamly.
646 base >= 4.9 && < 4.17
647 , containers >= 0.5 && < 0.7
648 , deepseq >= 1.4.1 && < 1.5
649 , directory >= 1.2.2 && < 1.4
650 , exceptions >= 0.8 && < 0.11
651 , ghc-prim >= 0.2 && < 0.9
652 , mtl >= 2.2 && < 2.3
653 , transformers >= 0.4 && < 0.7
654 , filepath >= 1.2.0.0 && < 1.5
656 -- The core streamly package
657 , streamly-core == 0.1.0
659 , fusion-plugin-types >= 0.1 && < 0.2
662 , transformers-base >= 0.4 && < 0.5
663 , primitive >= 0.5.4 && < 0.8
664 , heaps >= 0.3 && < 0.5
667 , atomic-primops >= 0.8 && < 0.9
668 , lockfree-queue >= 0.2.3 && < 0.3
670 , unicode-data >= 0.1 && < 0.4
673 , network >= 2.6 && < 3.2
676 build-depends: Win32 >= 2.6 && < 2.13
682 build-depends: template-haskell >= 2.14 && < 2.17
683 , inspection-testing >= 0.4 && < 0.5
685 -- Array uses a Storable constraint in dev build making several inspection
687 if flag(dev) && flag(inspection)
688 build-depends: inspection-and-dev-flags-cannot-be-used-together
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list