packages feed

ribosome-0.4.0.0: lib/Ribosome/Menu/Prompt/Data/PromptConfig.hs

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 (Eq, Show)

data PromptConfig m =
  PromptConfig {
    _source :: ConduitT () PromptEvent m (),
    _modes :: [PromptFlag] -> PromptEvent -> PromptState -> m PromptUpdate,
    _render :: PromptRenderer m,
    _flags :: [PromptFlag]
  }

makeClassy ''PromptConfig

class TestPromptFlag a where
  promptFlag :: PromptFlag -> a -> Bool

instance TestPromptFlag [PromptFlag] where
  promptFlag =
    elem

instance TestPromptFlag (PromptConfig m) where
  promptFlag flag =
    promptFlag flag . view flags

startInsert :: TestPromptFlag a => a -> Bool
startInsert =
  promptFlag StartInsert

onlyInsert :: TestPromptFlag a => a -> Bool
onlyInsert =
  promptFlag OnlyInsert