{-# LANGUAGE UndecidableInstances, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Monoid.Reducer.Char -- Copyright : (c) Edward Kmett 2009 -- License : BSD-style -- Maintainer : ekmett@gmail.com -- Stability : experimental -- Portability : non-portable (MPTCs) -- ----------------------------------------------------------------------------- module Data.Monoid.Reducer.Char ( module Data.Monoid.Reducer , CharReducer , invalidChar , fromChar ) where import Data.Monoid.Reducer import Data.Word (Word8) -- | Provides a mechanism for the UTF8 'Monoid' to report invalid characters to one or more monoids. class Reducer Char m => CharReducer m where fromChar :: Char -> m fromChar = unit invalidChar :: [Word8] -> m invalidChar = const mempty instance (CharReducer m, CharReducer m') => CharReducer (m,m') where invalidChar bs = (invalidChar bs, invalidChar bs) instance (CharReducer m, CharReducer m', CharReducer m'') => CharReducer (m,m',m'') where invalidChar bs = (invalidChar bs, invalidChar bs, invalidChar bs) instance (CharReducer m, CharReducer m', CharReducer m'', CharReducer m''') => CharReducer (m,m',m'',m''') where invalidChar bs = (invalidChar bs, invalidChar bs, invalidChar bs, invalidChar bs) instance CharReducer [Char]