@@ -70,11 +70,6 @@ module Data.Aeson.TH
71 , mkToJSON
71 , mkToJSON
72 , mkParseJSON
72 , mkParseJSON
74− -- * For the oft-conversion of CamelCase to underscore_case in JSON
76− , camelToUnderscoreDrop
77− , camelToUnderscoreDropChecked
80--------------------------------------------------------------------------------
75--------------------------------------------------------------------------------
@@ -95,7 +90,6 @@ import Data.Aeson.Types ( Value(..), Parser
95-- from base:
90-- from base:
96import Control.Applicative ( pure, (<$>), (<*>) )
91import Control.Applicative ( pure, (<$>), (<*>) )
97import Control.Monad ( return, mapM, liftM2, fail )
92import Control.Monad ( return, mapM, liftM2, fail )
98−import Data.Char ( isUpper, toLower)
99import Data.Bool ( Bool(False, True), otherwise, (&&) )
93import Data.Bool ( Bool(False, True), otherwise, (&&) )
100import Data.Eq ( (==) )
94import Data.Eq ( (==) )
101import Data.Function ( ($), (.) )
95import Data.Function ( ($), (.) )
@@ -103,10 +97,10 @@ import Data.Functor ( fmap )
103import Data.Int ( Int )
97import Data.Int ( Int )
104import Data.Either ( Either(Left, Right) )
98import Data.Either ( Either(Left, Right) )
105import Data.List ( (++), foldl, foldl', intercalate
99import Data.List ( (++), foldl, foldl', intercalate
106− , length, map, zip, genericLength, all, partition, drop
100+ , length, map, zip, genericLength, all, partition
108import Data.Maybe ( Maybe(Nothing, Just), catMaybes )
102import Data.Maybe ( Maybe(Nothing, Just), catMaybes )
109−import Prelude ( String, (-), Integer, fromIntegral, error, const )
103+import Prelude ( String, (-), Integer, fromIntegral, error )
110import Text.Printf ( printf )
104import Text.Printf ( printf )
111import Text.Show ( show )
105import Text.Show ( show )
112#if __GLASGOW_HASKELL__ < 700
106#if __GLASGOW_HASKELL__ < 700
@@ -878,41 +872,3 @@ valueConName (String _) = "String"
878valueConName (Number _) = "Number"
872valueConName (Number _) = "Number"
879valueConName (Bool _) = "Boolean"
873valueConName (Bool _) = "Boolean"
880valueConName Null = "Null"
874valueConName Null = "Null"
882−-- | Removes the first Int characters of string, then converts from
883−-- CamelCase to underscore_case.
885−-- For use by Aeson template haskell calls.
886−camelToUnderscore :: String -> String
887−camelToUnderscore = camelToUnderscoreDrop 0
889−-- | Removes the first Int characters of string, then converts from
890−-- CamelCase to underscore_case. Drops the first few characters from
893−-- For use by Aeson template haskell calls.
894−camelToUnderscoreDrop :: Int -> String -> String
895−camelToUnderscoreDrop i = camelToUnderscoreDropChecked (const i)
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.
901−-- For use by Aeson template haskell calls.
902−camelToUnderscoreDropChecked :: (String -> Int) -> String -> String
903−camelToUnderscoreDropChecked chk property =
904− underscore True input
907− input = drop (chk property) property
909− underscore :: Bool -- ^ Previous was a capital letter
910− -> String -- ^ The remaining string
912− underscore _ [] = []
913− underscore prev (x : xs) = if isUpper x
915− then toLower x : underscore True xs
916− else '_' : toLower x : underscore True xs
917− else x : underscore False xs