-- |
-- Module      : Data.Massiv.Core
-- Copyright   : (c) Alexey Kuleshevich 2018-2021
-- License     : BSD3
-- Maintainer  : Alexey Kuleshevich <lehins@yandex.ru>
-- Stability   : experimental
-- Portability : non-portable
--
module Data.Massiv.Core
  ( Array(List, unList)
  , Vector
  , MVector
  , Matrix
  , MMatrix
  , Elt
  , Construct
  , Load(R, loadArrayM, loadArrayWithSetM)
  , Stream(..)
  , Source
  , Resize
  , Extract
  , StrideLoad(..)
  , Slice
  , OuterSlice
  , InnerSlice
  , Manifest
  , Mutable
  , Ragged
  , Nested(..)
  , NestedStruct
  , L(..)
  , LN
  , ListItem
  , Scheduler
  , SchedulerWS
  , Comp(Seq, Par, Par', ParOn, ParN)
  , appComp
  , WorkerStates
  , initWorkerStates
  , module Data.Massiv.Core.Index
  -- * Numeric
  , FoldNumeric
  , Numeric
  , NumericFloat
  -- * Exceptions
  , MonadThrow(..)
  , throw
  , IndexException(..)
  , SizeException(..)
  , ShapeException(..)
  , module Data.Massiv.Core.Exception
  -- * Stateful Monads
  , MonadUnliftIO
  , MonadIO(liftIO)
  , PrimMonad(PrimState)
  ) where

import Control.Scheduler (SchedulerWS, initWorkerStates)
import Data.Massiv.Core.Common
import Data.Massiv.Core.Index
import Data.Massiv.Core.List
import Data.Massiv.Core.Exception
import Data.Massiv.Core.Operations (FoldNumeric, Numeric, NumericFloat)


-- | Append computation strategy using `Comp`'s `Monoid` instance.
--
-- @since 0.6.0
appComp :: (Construct r ix e, Load r ix e) => Comp -> Array r ix e -> Array r ix e
appComp :: Comp -> Array r ix e -> Array r ix e
appComp Comp
comp Array r ix e
arr = Comp -> Array r ix e -> Array r ix e
forall r ix e.
Construct r ix e =>
Comp -> Array r ix e -> Array r ix e
setComp (Comp
comp Comp -> Comp -> Comp
forall a. Semigroup a => a -> a -> a
<> Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) Array r ix e
arr
{-# INLINEABLE appComp #-}