@@ -70,11 +70,6 @@ module Data.Aeson.TH
7070
7171 , mkToJSON
7272 , mkParseJSON
73−
74− -- * For the oft-conversion of CamelCase to underscore_case in JSON
75− , camelToUnderscore
76− , camelToUnderscoreDrop
77− , camelToUnderscoreDropChecked
7873 ) where
7974
8075--------------------------------------------------------------------------------
@@ -95,7 +90,6 @@ import Data.Aeson.Types ( Value(..), Parser
9590-- from base:
9691import Control.Applicative ( pure, (<$>), (<*>) )
9792import Control.Monad ( return, mapM, liftM2, fail )
98−import Data.Char ( isUpper, toLower)
9993import Data.Bool ( Bool(False, True), otherwise, (&&) )
10094import Data.Eq ( (==) )
10195import Data.Function ( ($), (.) )
@@ -103,10 +97,10 @@ import Data.Functor ( fmap )
10397import Data.Int ( Int )
10498import Data.Either ( Either(Left, Right) )
10599import Data.List ( (++), foldl, foldl', intercalate
106− , length, map, zip, genericLength, all, partition, drop
100+ , length, map, zip, genericLength, all, partition
107101 )
108102import Data.Maybe ( Maybe(Nothing, Just), catMaybes )
109−import Prelude ( String, (-), Integer, fromIntegral, error, const )
103+import Prelude ( String, (-), Integer, fromIntegral, error )
110104import Text.Printf ( printf )
111105import Text.Show ( show )
112106#if __GLASGOW_HASKELL__ < 700
@@ -878,41 +872,3 @@ valueConName (String _) = "String"
878872valueConName (Number _) = "Number"
879873valueConName (Bool _) = "Boolean"
880874valueConName Null = "Null"
881−
882−-- | Removes the first Int characters of string, then converts from
883−-- CamelCase to underscore_case.
884−--
885−-- For use by Aeson template haskell calls.
886−camelToUnderscore :: String -> String
887−camelToUnderscore = camelToUnderscoreDrop 0
888−
889−-- | Removes the first Int characters of string, then converts from
890−-- CamelCase to underscore_case. Drops the first few characters from
891−-- the input.
892−--
893−-- For use by Aeson template haskell calls.
894−camelToUnderscoreDrop :: Int -> String -> String
895−camelToUnderscoreDrop i = camelToUnderscoreDropChecked (const i)
896−
897−-- | Removes the first Int characters of string, then converts from
898−-- CamelCase to underscore_case. Investigates the input string to
899−-- see how many characters to drop.
900−--
901−-- For use by Aeson template haskell calls.
902−camelToUnderscoreDropChecked :: (String -> Int) -> String -> String
903−camelToUnderscoreDropChecked chk property =
904− underscore True input
905− where
906− input :: String
907− input = drop (chk property) property
908−
909− underscore :: Bool -- ^ Previous was a capital letter
910− -> String -- ^ The remaining string
911− -> String
912− underscore _ [] = []
913− underscore prev (x : xs) = if isUpper x
914− then if prev
915− then toLower x : underscore True xs
916− else '_' : toLower x : underscore True xs
917− else x : underscore False xs
918−