packages feed

rebound-0.1.2.0: src/Data/LocalName.hs

-- |
-- Module      : Data.LocalName
-- Description : Strings with an "identity" equality
module Data.LocalName where

import Test.QuickCheck

-- | A simple wrapper for strings
-- All local names are *equal* so that when they are used as patterns
-- they will be ignored.
newtype LocalName = LocalName {name :: String}

instance Eq LocalName where
  x1 == x2 = True

rawEq :: LocalName -> LocalName -> Bool
rawEq n1 n2 = name n1 == name n2

instance Show LocalName where
  show (LocalName x) = x

-- | A default name
internalName :: LocalName
internalName = LocalName "_internal"

wildcardName :: LocalName
wildcardName = LocalName "_"

instance Arbitrary LocalName where
  arbitrary = do 
    str <- elements [ "x", "y", "z", "w" ]
    num <- elements [1,2,3,4,5,0]
    return (LocalName (str ++ show num))