streamly-core-0.1.0: src/Streamly/Internal/Data/Tuple/Strict.hs
-- |
-- Module : Streamly.Internal.Data.Tuple.Strict
-- Copyright : (c) 2019 Composewell Technologies
-- (c) 2013 Gabriel Gonzalez
-- License : BSD3
-- Maintainer : streamly@composewell.com
-- Stability : experimental
-- Portability : GHC
--
-- | Strict data types to be used as accumulator for strict left folds and
-- scans. For more comprehensive strict data types see
-- https://hackage.haskell.org/package/strict-base-types . The names have been
-- suffixed by a prime so that programmers can easily distinguish the strict
-- versions from the lazy ones.
--
-- One major advantage of strict data structures as accumulators in folds and
-- scans is that it helps the compiler optimize the code much better by
-- unboxing. In a big tight loop the difference could be huge.
--
module Streamly.Internal.Data.Tuple.Strict
(
Tuple' (..)
, Tuple3' (..)
-- XXX Remove this type, use a fuse annotation in Tuple3' itself or use a
-- custom type where fuse annotation is needed.
, Tuple3Fused' (..)
, Tuple4' (..)
)
where
import Fusion.Plugin.Types (Fuse(..))
-- | A strict '(,)'
data Tuple' a b = Tuple' !a !b deriving Show
-- XXX Add TupleFused'
-- | A strict '(,,)'
{-# ANN type Tuple3Fused' Fuse #-}
data Tuple3' a b c = Tuple3' !a !b !c deriving Show
-- | A strict '(,,)'
data Tuple3Fused' a b c = Tuple3Fused' !a !b !c deriving Show
-- | A strict '(,,,)'
data Tuple4' a b c d = Tuple4' !a !b !c !d deriving Show