0 | module Test.DepTyCheck.Gen.Labels
2 | import Control.Monad.State.Interface
3 | import public Control.Monad.Trans
14 | data Label : Type where
15 | StringLabel : String -> Label
18 | FromString Label where
19 | fromString = StringLabel
23 | show (StringLabel x) = x
27 | StringLabel x == StringLabel y = x == y
31 | compare = comparing $
\(StringLabel x) => x
36 | interface Monad m => CanManageLabels (0 m : Type -> Type) where
37 | manageLabel : Label -> m ()
40 | CanManageLabels m => MonadTrans t => Monad (t m) => CanManageLabels (t m) where
41 | manageLabel = lift . manageLabel
44 | IgnoreLabels : Monad m => CanManageLabels m
45 | IgnoreLabels = I where
46 | [I] CanManageLabels m where
47 | manageLabel _ = pure ()
50 | [PrintAllLabels] HasIO io => CanManageLabels io where
51 | manageLabel = putStrLn . show