module TeaCleaner.Options ( jsonOptions ) where import qualified Data.Aeson.TH as Aeson import Prelude hiding (id) import Data.Char applyFirst :: (Char -> Char) -> String -> String applyFirst _ [] = [] applyFirst f [x] = [f x] applyFirst f (x:xs) = f x: xs -- | Generic casing for symbol separated names symbCase :: String -> String symbCase = u . applyFirst toLower where u [] = [] u (x:xs) | isUpper x = '_' : toLower x : u xs | otherwise = x : u xs jsonOptions :: Aeson.Options jsonOptions = Aeson.defaultOptions { Aeson.fieldLabelModifier = symbCase }