{-# LANGUAGE Safe #-}
module Copilot.Language.Operators.Struct
( (#)
) where
import Copilot.Core.Type
import Copilot.Core.Operators
import Copilot.Language.Stream (Stream (..))
import GHC.TypeLits (KnownSymbol)
(#) :: (KnownSymbol s, Typed t, Typed a, Struct a)
=> Stream a -> (a -> Field s t) -> Stream t
# :: forall (s :: Symbol) t a.
(KnownSymbol s, Typed t, Typed a, Struct a) =>
Stream a -> (a -> Field s t) -> Stream t
(#) Stream a
s a -> Field s t
f = Op1 a t -> Stream a -> Stream t
forall a1 a.
(Typed a1, Typed a) =>
Op1 a1 a -> Stream a1 -> Stream a
Op1 (Type a -> Type t -> (a -> Field s t) -> Op1 a t
forall (s :: Symbol) a b.
KnownSymbol s =>
Type a -> Type b -> (a -> Field s b) -> Op1 a b
GetField Type a
forall a. Typed a => Type a
typeOf Type t
forall a. Typed a => Type a
typeOf a -> Field s t
f) Stream a
s