packages feed

miv-0.4.7: src/Mode.hs

{-# LANGUAGE BlockArguments, LambdaCase, OverloadedStrings #-}
module Mode where

import Data.Text (unpack)
import Data.YAML

import ShowText

data Mode = NormalMode
          | VisualMode
          | SelectMode
          | InsertMode
          | CmdlineMode
          | ExMode
          | OperatorPendingMode
          | ReplaceMode
          | VirtualReplaceMode
          | InsertNormalMode
          | InesrtVisualMode
          | InsertSelectMode
          deriving (Eq, Ord)

instance ShowText Mode where
  show NormalMode = "n"
  show VisualMode = "v"
  show SelectMode = "s"
  show InsertMode = "i"
  show CmdlineMode = "c"
  show ExMode = "ex"
  show OperatorPendingMode = "o"
  show ReplaceMode = "r"
  show VirtualReplaceMode = "vr"
  show InsertNormalMode = "in"
  show InesrtVisualMode = "iv"
  show InsertSelectMode = "is"

instance FromYAML Mode where
  parseYAML = withStr "!!str" \case
    "n"  -> return NormalMode
    "v"  -> return VisualMode
    "s"  -> return SelectMode
    "i"  -> return InsertMode
    "c"  -> return CmdlineMode
    "ex" -> return ExMode
    "o"  -> return OperatorPendingMode
    "r"  -> return ReplaceMode
    "vr" -> return VirtualReplaceMode
    "in" -> return InsertNormalMode
    "iv" -> return InesrtVisualMode
    "is" -> return InsertSelectMode
    x    -> fail $ unpack $ "failed to parse mode: " <> x