{-# LANGUAGE EmptyDataDecls, TypeFamilies, FlexibleContexts #-} module JuicyBar.FunctorStyle where import Data.Record import Data.Record.Plain import FRP.Grapefruit.Signal import FRP.Grapefruit.Signal.Continuous as CSignal import FRP.Grapefruit.Signal.Segmented as SSignal data FunctorStyle (func :: * -> *) instance Style (FunctorStyle signal) where type K (FunctorStyle signal) = PlainKind type instance Value (FunctorStyle func) val = func val samplingTransformerPiece :: (Sampler sampler, Samplee samplee) => sampler era () -> TransformerPiece (FunctorStyle (samplee era)) (FunctorStyle (sampler era)) val samplingTransformerPiece sampler = TransformerPiece $ (sampler #>) sampleRecord :: (Record PlainKind record, Sampler sampler, Samplee samplee) => sampler era () -> record (FunctorStyle (samplee era)) -> record (FunctorStyle (sampler era)) sampleRecord sampler = Data.Record.map $ encase $ samplingTransformerPiece sampler