polyvariadic: Creation and application of polyvariadic functions

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain]

Creation and application of polyvariadic functions, see the docs for usage and examples


[Skip to ReadMe]

Properties

Versions0.3.0.0, 0.3.0.1, 0.3.0.2, 0.3.0.2, 0.3.0.3
Change logChangeLog.md
Dependenciesbase (>=4.7 && <4.11), containers (>=0.1 && <0.6), semigroups (==0.18.*) [details]
LicenseBSD-3-Clause
Copyright(C) Francesco Gazzetta 2017
AuthorFrancesco Gazzetta
Maintainerfrancygazz@gmail.com
CategoryData
Home pagehttps://github.com/fgaz/polyvariadic
Source repositoryhead: git clone git://github.com/fgaz/polyvariadic.git
UploadedTue Dec 19 09:08:22 UTC 2017 by fgaz

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees


Readme for polyvariadic-0.3.0.2

[back to package description]

polyvariadic

Creation and application of polyvariadic functions

Build Status Hackage

For example, the classic printf:

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
import Data.Function.Polyvariadic
import Data.Accumulator

magicChar = '%'
notMagicChar = (/= magicChar)

data PrintfAccum = PrintfAccum { done :: String, todo :: String }

instance Show x => Accumulator PrintfAccum x where
  accumulate x (PrintfAccum done (_:todo)) = PrintfAccum
                                              (done ++ show x ++ takeWhile notMagicChar todo)
                                              (dropWhile notMagicChar todo)
  accumulate _ acc = acc

printf' str = polyvariadic
               (PrintfAccum (takeWhile notMagicChar str) (dropWhile notMagicChar str))
               done
>>> printf' "aaa%bbb%ccc%ddd" "TEST" 123 True
"aaa\"TEST\"bbb123cccTrueddd"