Copyright | (c) 2020 Composewell Technologies |
---|---|
License | BSD-3-Clause |
Maintainer | streamly@composewell.com |
Stability | experimental |
Portability | GHC |
Safe Haskell | None |
Language | Haskell2010 |
A newtype wrapper over the Fold
type providing distributing Applicative
,
Semigroup
, Monoid
, Num
, Floating
and Fractional
instances.
Documentation
Tee
is a newtype wrapper over the Fold
type providing distributing
Applicative
, Semigroup
, Monoid
, Num
, Floating
and Fractional
instances.
The input received by the composed Tee
is replicated and distributed to
the constituent folds of the Tee
.
For example, to compute the average of numbers in a stream without going through the stream twice:
>>>
avg = (/) <$> (Tee Fold.sum) <*> (Tee $ fmap fromIntegral Fold.length)
>>>
Stream.fold (unTee avg) $ Stream.fromList [1.0..100.0]
50.5
Similarly, the Semigroup
and Monoid
instances of Tee
distribute the
input to both the folds and combine the outputs using Monoid or Semigroup
instances of the output types:
>>>
import Data.Monoid (Sum(..))
>>>
t = Tee Fold.one <> Tee Fold.latest
>>>
Stream.fold (unTee t) (fmap Sum $ Stream.enumerateFromTo 1.0 100.0)
Just (Sum {getSum = 101.0})
The Num
, Floating
, and Fractional
instances work in the same way.
Instances
Functor m => Functor (Tee m a) Source # | |
Monad m => Applicative (Tee m a) Source # |
|
(Monad m, Floating b) => Floating (Tee m a b) Source # | Binary |
Defined in Streamly.Internal.Data.Fold.Tee exp :: Tee m a b -> Tee m a b # log :: Tee m a b -> Tee m a b # sqrt :: Tee m a b -> Tee m a b # (**) :: Tee m a b -> Tee m a b -> Tee m a b # logBase :: Tee m a b -> Tee m a b -> Tee m a b # sin :: Tee m a b -> Tee m a b # cos :: Tee m a b -> Tee m a b # tan :: Tee m a b -> Tee m a b # asin :: Tee m a b -> Tee m a b # acos :: Tee m a b -> Tee m a b # atan :: Tee m a b -> Tee m a b # sinh :: Tee m a b -> Tee m a b # cosh :: Tee m a b -> Tee m a b # tanh :: Tee m a b -> Tee m a b # asinh :: Tee m a b -> Tee m a b # acosh :: Tee m a b -> Tee m a b # atanh :: Tee m a b -> Tee m a b # log1p :: Tee m a b -> Tee m a b # expm1 :: Tee m a b -> Tee m a b # | |
(Monad m, Fractional b) => Fractional (Tee m a b) Source # | Binary |
(Monad m, Num b) => Num (Tee m a b) Source # | Binary |
Defined in Streamly.Internal.Data.Fold.Tee | |
(Semigroup b, Monad m) => Semigroup (Tee m a b) Source # |
|
(Semigroup b, Monoid b, Monad m) => Monoid (Tee m a b) Source # |
|