-- |
--
-- Module      : Ronn.Argument
-- Copyright   : (c) 2024 Patrick Brisbin
-- License     : AGPL-3
-- Maintainer  : pbrisbin@gmail.com
-- Stability   : experimental
-- Portability : POSIX
module Ronn.Argument
  ( HasArgument (..)
  , addArgument
  )
where

import Prelude

import Data.String (IsString (..))
import Data.Text (Text)
import Ronn.AST

class HasArgument a where
  getArgument :: a -> Maybe String

addArgument :: HasArgument a => Text -> a -> RonnPart -> RonnPart
addArgument :: forall a. HasArgument a => Text -> a -> RonnPart -> RonnPart
addArgument Text
sep a
a RonnPart
p = case a -> Maybe String
forall a. HasArgument a => a -> Maybe String
getArgument a
a of
  Maybe String
Nothing -> RonnPart
p
  Just String
arg -> [RonnPart] -> RonnPart
forall a. Monoid a => [a] -> a
mconcat [RonnPart
p, Text -> RonnPart
RonnRaw Text
sep, RonnPart -> RonnPart
RonnVariable (RonnPart -> RonnPart) -> RonnPart -> RonnPart
forall a b. (a -> b) -> a -> b
$ String -> RonnPart
forall a. IsString a => String -> a
fromString String
arg]