{-|
Copyright   : (c) Nathan Bloomfield, 2017
License     : GPL-3
Maintainer  : nbloomf@gmail.com
Stability   : experimental
-}

module Hakyll.Shortcode.Types.Letters_Numbers_Hyphens_Underscores (
  Letters_Numbers_Hyphens_Underscores()
) where


import Text.Regex.Posix ((=~))

import Hakyll.Shortcode.Validate


-- | Strings consisting only of a-z, A-Z, 0-9, -, and _.
newtype Letters_Numbers_Hyphens_Underscores
  = Make { unMake :: String } deriving Eq

instance Validate Letters_Numbers_Hyphens_Underscores where
  validate text = case text =~ "^[_a-zA-Z0-9-]+$" of
    True  -> Right $ Make text
    False -> Left "Must be one or more alphanumeric characters, hyphens, or underscores."

instance Show Letters_Numbers_Hyphens_Underscores where
  show = unMake