toSnake :: String -> String
toSnake s = do
    let s1 = Re.replace "([A-Z\\d])([A-Z][a-z\\d])" s "\\1_\\2"
    let s2 = Re.replace "([a-z])([2-Z])" s1 "\\1_\\2"
    let s3 = Re.replace "[-. ]" s2 "_"
    map C.toLower s3
toSnake :: String -> String
toSnake s = do
    let s1 = Re.replace "([A-Z\\d])([A-Z][a-z\\d])" s "\\1_\\2"
    let s2 = Re.replace "([a-z])([2-Z])" s1 "\\1_\\2"
    let s3 = Re.replace "[-. ]" s2 "_"
    map C.toLower s3
toSnake s = do
    let s1 = Re.replace "([A-Z\\d])([A-Z][a-z\\d])" s "\\1_\\2"
    let s2 = Re.replace "([a-z])([2-Z])" s1 "\\1_\\2"
    let s3 = Re.replace "[-. ]" s2 "_"
    map C.toLower s3