{-# LANGUAGE OverloadedStrings #-}

module StreamPatch.Example where

import StreamPatch.Patch
import StreamPatch.Seek
import StreamPatch.Patch.Compare qualified as Compare
import StreamPatch.Patch.Compare ( Via(..), EqualityCheck(..) )
import StreamPatch.HFunctorList
import Data.Vinyl

import Data.Text ( Text )
import Numeric.Natural

ex :: Patch (SIx Natural) '[Compare.Meta ('ViaEq 'Exact)] Text
ex :: Patch (SIx Natural) '[Meta ('ViaEq 'Exact)] Text
ex = Text
-> SIx Natural
-> HFunctorList '[Meta ('ViaEq 'Exact)] Text
-> Patch (SIx Natural) '[Meta ('ViaEq 'Exact)] Text
forall s (fs :: [* -> *]) a.
a -> s -> HFunctorList fs a -> Patch s fs a
Patch Text
"no way this works LMAO" (Natural -> SIx Natural
forall a. a -> SIx a
SIx Natural
0) (HFunctorList '[Meta ('ViaEq 'Exact)] Text
 -> Patch (SIx Natural) '[Meta ('ViaEq 'Exact)] Text)
-> HFunctorList '[Meta ('ViaEq 'Exact)] Text
-> Patch (SIx Natural) '[Meta ('ViaEq 'Exact)] Text
forall a b. (a -> b) -> a -> b
$ Rec (Flap Text) '[Meta ('ViaEq 'Exact)]
-> HFunctorList '[Meta ('ViaEq 'Exact)] Text
forall {k} (fs :: [k -> *]) (a :: k).
Rec (Flap a) fs -> HFunctorList fs a
HFunctorList (Rec (Flap Text) '[Meta ('ViaEq 'Exact)]
 -> HFunctorList '[Meta ('ViaEq 'Exact)] Text)
-> Rec (Flap Text) '[Meta ('ViaEq 'Exact)]
-> HFunctorList '[Meta ('ViaEq 'Exact)] Text
forall a b. (a -> b) -> a -> b
$ Meta ('ViaEq 'Exact) Text -> Flap Text (Meta ('ViaEq 'Exact))
forall {k} (a :: k) (f :: k -> *). f a -> Flap a f
Flap (Maybe (CompareRep ('ViaEq 'Exact) Text)
-> Meta ('ViaEq 'Exact) Text
forall (v :: Via) a. Maybe (CompareRep v a) -> Meta v a
Compare.Meta Maybe (CompareRep ('ViaEq 'Exact) Text)
forall a. Maybe a
Nothing) Flap Text (Meta ('ViaEq 'Exact))
-> Rec (Flap Text) '[] -> Rec (Flap Text) '[Meta ('ViaEq 'Exact)]
forall {u} (a :: u -> *) (r :: u) (rs :: [u]).
a r -> Rec a rs -> Rec a (r : rs)
:& Rec (Flap Text) '[]
forall {u} (a :: u -> *). Rec a '[]
RNil

ex2 :: Patch (SIx Natural) '[] Text
ex2 :: Patch (SIx Natural) '[] Text
ex2 = Text
-> SIx Natural
-> HFunctorList '[] Text
-> Patch (SIx Natural) '[] Text
forall s (fs :: [* -> *]) a.
a -> s -> HFunctorList fs a -> Patch s fs a
Patch Text
"no way this works LMAO" (Natural -> SIx Natural
forall a. a -> SIx a
SIx Natural
0) (HFunctorList '[] Text -> Patch (SIx Natural) '[] Text)
-> HFunctorList '[] Text -> Patch (SIx Natural) '[] Text
forall a b. (a -> b) -> a -> b
$ Rec (Flap Text) '[] -> HFunctorList '[] Text
forall {k} (fs :: [k -> *]) (a :: k).
Rec (Flap a) fs -> HFunctorList fs a
HFunctorList Rec (Flap Text) '[]
forall {u} (a :: u -> *). Rec a '[]
RNil