+-- | ESD streams.
+class Stream s where
+ streamSampleRate ∷ s pr → Int
+
+-- | ESD streams which behave as sources.
+class Stream rs ⇒ ReadableStream rs dvec where
+ readFrames ∷ ( AncestorRegion pr cr
+ , MonadIO cr
+ )
+ ⇒ rs pr
+ → Int -- ^ number of frames to read
+ → cr dvec -- ^ frames in deinterleaved vectors
+
+-- | ESD streams which behave as sinks.
+class Stream ws ⇒ WritableStream ws dvec where
+ writeFrames ∷ ( AncestorRegion pr cr
+ , MonadIO cr
+ )
+ ⇒ ws pr
+ → dvec -- ^ frames in deinterleaved vectors
+ → cr ()