Skip to content

Globidev/Fun-with-templates

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fun-with-templates Build Status

experimenting with the c++11/14 standard

Status

Functional stuff

In this part of the library, we will abuse CRTP and parenthesis operator overloading to provide composable function objects able to achieve Parameteric polymorphism.

Lists

This module will provide useful and generic functions to operate on containers.
I will use Haskell's Data.List package as a specification.
The functions should be guaranteed to work with any sequence container templated with one mandatory type and satisfying (at least) the concept of input iterator

Basic functions
  • ++ :: [a] -> [a] -> [a] named append
  • head :: [a] -> a
  • last :: [a] -> a
  • tail :: [a] -> [a]
  • init :: [a] -> [a]
  • null :: [a] -> Bool
  • length :: [a] -> Int
Transformations
  • map :: (a -> b) -> [a] -> [b]
  • reverse :: [a] -> [a]
  • intersperse :: a -> [a] -> [a]
  • intercalate :: [a] -> [[a]] -> [a]
  • transpose :: [[a]] -> [[a]]
  • subsequences :: [a] -> [[a]]
  • permutations :: [a] -> [[a]]
Folds
Basic
  • foldl :: (b -> a -> b) -> b -> [a] -> b
  • foldl1 :: (a -> a -> a) -> [a] -> a
  • foldr :: (a -> b -> b) -> b -> [a] -> b
  • foldr1 :: (a -> a -> a) -> [a] -> a
Special
  • concat :: [[a]] -> [a]
  • concatMap :: (a -> [b]) -> [a] -> [b]
  • and :: [Bool] -> Bool
  • or :: [Bool] -> Bool
  • any :: (a -> Bool) -> [a] -> Bool
  • all :: (a -> Bool) -> [a] -> Bool
  • sum :: Num a => [a] -> a
  • product :: Num a => [a] -> a
  • maximum :: Ord a => [a] -> a
  • minimum :: Ord a => [a] -> a
Building
Scans
  • scanl :: (b -> a -> b) -> b -> [a] -> [b]
  • scanl1 :: (a -> a -> a) -> [a] -> [a]
  • scanr :: (a -> b -> b) -> b -> [a] -> [b]
  • scanr1 :: (a -> a -> a) -> [a] -> [a]
Accumulating
  • mapAccumL :: (acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y])
  • mapAccumR :: (acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y])
Unfolding
  • unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
Sublists
Extractions
  • take :: Int -> [a] -> [a]
  • drop :: Int -> [a] -> [a]
  • splitAt :: Int -> [a] -> ([a], [a])
  • takeWhile :: (a -> Bool) -> [a] -> [a]
  • dropWhile :: (a -> Bool) -> [a] -> [a]
  • dropWhileEnd :: (a -> Bool) -> [a] -> [a]
  • span :: (a -> Bool) -> [a] -> ([a], [a])
  • break :: (a -> Bool) -> [a] -> ([a], [a])
  • stripPrefix :: Eq a => [a] -> [a] -> Maybe [a]
  • group :: Eq a => [a] -> [[a]]
  • inits :: [a] -> [[a]]
  • tails :: [a] -> [[a]]
Predicates
  • isPrefixOf :: Eq a => [a] -> [a] -> Bool
  • isSuffixOf :: Eq a => [a] -> [a] -> Bool
  • isInfixOf :: Eq a => [a] -> [a] -> Bool
Searching
  • elem :: Eq a => a -> [a] -> Bool
  • notElem :: Eq a => a -> [a] -> Bool
  • lookup :: Eq a => a -> [(a, b)] -> Maybe b
  • find :: (a -> Bool) -> [a] -> Maybe a
  • filter :: (a -> Bool) -> [a] -> [a]
  • partition :: (a -> Bool) -> [a] -> ([a], [a])
Indexing
  • !! :: [a] -> Int -> a
  • elemIndex :: Eq a => a -> [a] -> Maybe Int
  • elemIndices :: Eq a => a -> [a] -> [Int]
  • findIndex :: (a -> Bool) -> [a] -> Maybe Int
  • findIndices :: (a -> Bool) -> [a] -> [Int]
Zipping
  • zip :: [a] -> [b] -> [(a, b)] made variadic
  • zipWith :: (a -> b -> c) -> [a] -> [b] -> [c] made variadic
  • unzip :: [(a, b)] -> ([a], [b]) made variadic
Special lists
Strings
  • lines :: String -> [String]
  • words :: String -> [String]
  • unlines :: [String] -> String
  • unwords :: [String] -> String
Set operations
  • nub :: Eq a => [a] -> [a]
  • delete :: Eq a => a -> [a] -> [a]
  • \\ :: Eq a => [a] -> [a] -> [a]
  • union :: Eq a => [a] -> [a] -> [a]
  • intersect :: Eq a => [a] -> [a] -> [a]
Ordered lists
  • sort :: Ord a => [a] -> [a]
  • insert :: Ord a => a -> [a] -> [a]
Generalized functions
  • nubBy :: (a -> a -> Bool) -> [a] -> [a]
  • deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
  • deleteFirstsBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]
  • unionBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]
  • intersectBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]
  • groupBy :: (a -> a -> Bool) -> [a] -> [[a]]
  • sortBy :: (a -> a -> Ordering) -> [a] -> [a]
  • insertBy :: (a -> a -> Ordering) -> a -> [a] -> [a]
  • maximumBy :: (a -> a -> Ordering) -> [a] -> a
  • minimumBy :: (a -> a -> Ordering) -> [a] -> a

About

Just experimenting with the c++11/14 standard

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published