{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ViewPatterns #-}
module Dovetail.Core.Data.Array.NonEmpty.Internal where
import Data.Foldable (fold)
import Data.Vector (Vector)
import Data.Vector qualified as Vector
import Dovetail
import Dovetail.Evaluate (builtIn)
import Language.PureScript qualified as P
env :: forall ctx. Env ctx
env :: Env ctx
env = do
let _ModuleName :: ModuleName
_ModuleName = Text -> ModuleName
P.ModuleName Text
"Data.Array.NonEmpty.Internal"
[Env ctx] -> Env ctx
forall (t :: * -> *) m. (Foldable t, Monoid m) => t m -> m
fold
[
ModuleName
-> Text
-> ((Value ctx -> Value ctx -> Eval ctx (Value ctx))
-> Vector (Value ctx) -> Eval ctx (Value ctx))
-> Env ctx
forall ctx a. ToValue ctx a => ModuleName -> Text -> a -> Env ctx
builtIn @ctx @((Value ctx -> Value ctx -> Eval ctx (Value ctx)) -> Vector (Value ctx) -> Eval ctx (Value ctx))
ModuleName
_ModuleName Text
"foldr1Impl"
\Value ctx -> Value ctx -> Eval ctx (Value ctx)
f ->
(Value ctx -> Value ctx -> Eval ctx (Value ctx))
-> Vector (Value ctx) -> Eval ctx (Value ctx)
forall (m :: * -> *) a.
Monad m =>
(a -> a -> m a) -> Vector a -> m a
Vector.fold1M ((Value ctx -> Value ctx -> Eval ctx (Value ctx))
-> Value ctx -> Value ctx -> Eval ctx (Value ctx)
forall a b c. (a -> b -> c) -> b -> a -> c
flip Value ctx -> Value ctx -> Eval ctx (Value ctx)
f) (Vector (Value ctx) -> Eval ctx (Value ctx))
-> (Vector (Value ctx) -> Vector (Value ctx))
-> Vector (Value ctx)
-> Eval ctx (Value ctx)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector (Value ctx) -> Vector (Value ctx)
forall a. Vector a -> Vector a
Vector.reverse
, ModuleName
-> Text
-> ((Value ctx -> Value ctx -> Eval ctx (Value ctx))
-> Vector (Value ctx) -> Eval ctx (Value ctx))
-> Env ctx
forall ctx a. ToValue ctx a => ModuleName -> Text -> a -> Env ctx
builtIn @ctx @((Value ctx -> Value ctx -> Eval ctx (Value ctx)) -> Vector (Value ctx) -> Eval ctx (Value ctx))
ModuleName
_ModuleName Text
"foldl1Impl"
(Value ctx -> Value ctx -> Eval ctx (Value ctx))
-> Vector (Value ctx) -> Eval ctx (Value ctx)
forall (m :: * -> *) a.
Monad m =>
(a -> a -> m a) -> Vector a -> m a
Vector.fold1M
, ModuleName
-> Text
-> ((Value ctx -> Value ctx -> Eval ctx (Value ctx))
-> ((Vector (Value ctx)
-> Value ctx -> Eval ctx (Vector (Value ctx)))
-> Value ctx -> Eval ctx (Value ctx))
-> (Value ctx -> Eval ctx (Value ctx))
-> Vector (Value ctx)
-> Eval ctx (Value ctx))
-> Env ctx
forall ctx a. ToValue ctx a => ModuleName -> Text -> a -> Env ctx
builtIn @ctx @(
(Value ctx -> Value ctx -> Eval ctx (Value ctx))
-> ((Vector (Value ctx) -> Value ctx -> Eval ctx (Vector (Value ctx))) -> Value ctx -> Eval ctx (Value ctx))
-> (Value ctx -> Eval ctx (Value ctx))
-> Vector (Value ctx)
-> Eval ctx (Value ctx)
)
ModuleName
_ModuleName Text
"traverse1Impl"
\Value ctx -> Value ctx -> Eval ctx (Value ctx)
_apply (Vector (Value ctx) -> Value ctx -> Eval ctx (Vector (Value ctx)))
-> Value ctx -> Eval ctx (Value ctx)
_fmap Value ctx -> Eval ctx (Value ctx)
f Vector (Value ctx)
xs -> do
let _cons :: Value ctx -> Value ctx -> Eval ctx (Value ctx)
_cons :: Value ctx -> Value ctx -> Eval ctx (Value ctx)
_cons Value ctx
bs Value ctx
a = do
Value ctx
b <- Value ctx -> Eval ctx (Value ctx)
f Value ctx
a
(Vector (Value ctx) -> Value ctx -> Eval ctx (Vector (Value ctx)))
-> Value ctx -> Eval ctx (Value ctx)
_fmap (\Vector (Value ctx)
ys Value ctx
y -> Vector (Value ctx) -> Eval ctx (Vector (Value ctx))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Vector (Value ctx) -> Value ctx -> Vector (Value ctx)
forall a. Vector a -> a -> Vector a
Vector.snoc Vector (Value ctx)
ys Value ctx
y)) Value ctx
bs Eval ctx (Value ctx)
-> (Value ctx -> Eval ctx (Value ctx)) -> Eval ctx (Value ctx)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Value ctx -> Value ctx -> Eval ctx (Value ctx)
`_apply` Value ctx
b)
(Value ctx -> Value ctx -> Eval ctx (Value ctx))
-> Vector (Value ctx) -> Eval ctx (Value ctx)
forall (m :: * -> *) a.
Monad m =>
(a -> a -> m a) -> Vector a -> m a
Vector.fold1M Value ctx -> Value ctx -> Eval ctx (Value ctx)
_cons Vector (Value ctx)
xs
]