{-|

Module      : Recursion
Description : Simple recursion using foldr'.
Copyright   : © Frank Jung, 2026
License     : GPL-3.0-only

This is a simple example of recursion in Haskell. This uses
'Data.Foldable' functions.

 -}
 module Recursion (snake2camel) where

import           Data.Char     (toUpper)
import           Data.Foldable (Foldable (foldr'))

-- | Convert snake_case to camelCase.
snake2camel :: String -> String
snake2camel :: String -> String
snake2camel  = (Char -> String -> String) -> String -> String -> String
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr' Char -> String -> String
f String
""
  where
    f :: Char -> String -> String
f Char
'_' (Char
x:String
xs) = Char -> Char
toUpper Char
x Char -> String -> String
forall a. a -> [a] -> [a]
: String
xs
    f Char
x String
xs       = Char
x Char -> String -> String
forall a. a -> [a] -> [a]
: String
xs