module Ribosome.Menu.Prompt.Data.PromptConfig where import Conduit (ConduitT) import Control.Lens (view) import Ribosome.Menu.Prompt.Data.PromptEvent (PromptEvent) import Ribosome.Menu.Prompt.Data.PromptRenderer (PromptRenderer) import Ribosome.Menu.Prompt.Data.PromptState (PromptState) import Ribosome.Menu.Prompt.Data.PromptUpdate (PromptUpdate) data PromptFlag = StartInsert | OnlyInsert deriving (PromptFlag -> PromptFlag -> Bool (PromptFlag -> PromptFlag -> Bool) -> (PromptFlag -> PromptFlag -> Bool) -> Eq PromptFlag forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: PromptFlag -> PromptFlag -> Bool $c/= :: PromptFlag -> PromptFlag -> Bool == :: PromptFlag -> PromptFlag -> Bool $c== :: PromptFlag -> PromptFlag -> Bool Eq, Int -> PromptFlag -> ShowS [PromptFlag] -> ShowS PromptFlag -> String (Int -> PromptFlag -> ShowS) -> (PromptFlag -> String) -> ([PromptFlag] -> ShowS) -> Show PromptFlag forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [PromptFlag] -> ShowS $cshowList :: [PromptFlag] -> ShowS show :: PromptFlag -> String $cshow :: PromptFlag -> String showsPrec :: Int -> PromptFlag -> ShowS $cshowsPrec :: Int -> PromptFlag -> ShowS Show) data PromptConfig m = PromptConfig { PromptConfig m -> ConduitT () PromptEvent m () _source :: ConduitT () PromptEvent m (), PromptConfig m -> [PromptFlag] -> PromptEvent -> PromptState -> m PromptUpdate _modes :: [PromptFlag] -> PromptEvent -> PromptState -> m PromptUpdate, PromptConfig m -> PromptRenderer m _render :: PromptRenderer m, PromptConfig m -> [PromptFlag] _flags :: [PromptFlag] } makeClassy ''PromptConfig class TestPromptFlag a where promptFlag :: PromptFlag -> a -> Bool instance TestPromptFlag [PromptFlag] where promptFlag :: PromptFlag -> [PromptFlag] -> Bool promptFlag = PromptFlag -> [PromptFlag] -> Bool forall (f :: * -> *) a. (Foldable f, DisallowElem f, Eq a) => a -> f a -> Bool elem instance TestPromptFlag (PromptConfig m) where promptFlag :: PromptFlag -> PromptConfig m -> Bool promptFlag PromptFlag flag = PromptFlag -> [PromptFlag] -> Bool forall a. TestPromptFlag a => PromptFlag -> a -> Bool promptFlag PromptFlag flag ([PromptFlag] -> Bool) -> (PromptConfig m -> [PromptFlag]) -> PromptConfig m -> Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . Getting [PromptFlag] (PromptConfig m) [PromptFlag] -> PromptConfig m -> [PromptFlag] forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a view Getting [PromptFlag] (PromptConfig m) [PromptFlag] forall c (m :: * -> *). HasPromptConfig c m => Lens' c [PromptFlag] flags startInsert :: TestPromptFlag a => a -> Bool startInsert :: a -> Bool startInsert = PromptFlag -> a -> Bool forall a. TestPromptFlag a => PromptFlag -> a -> Bool promptFlag PromptFlag StartInsert onlyInsert :: TestPromptFlag a => a -> Bool onlyInsert :: a -> Bool onlyInsert = PromptFlag -> a -> Bool forall a. TestPromptFlag a => PromptFlag -> a -> Bool promptFlag PromptFlag OnlyInsert