polyvariadic: Creation and application of polyvariadic functions

[ bsd3, data, library ] [ Propose Tags ]
This version is deprecated.

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


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.3.0.0, 0.3.0.1, 0.3.0.2, 0.3.0.3, 0.3.0.4 (info)
Change log ChangeLog.md
Dependencies base (>=4.7 && <4.11), containers (>=0.1 && <0.6), semigroups (>=0.18 && <0.19) [details]
License BSD-3-Clause
Copyright (C) Francesco Gazzetta 2017
Author Francesco Gazzetta
Maintainer francygazz@gmail.com
Category Data
Home page https://github.com/fgaz/polyvariadic
Source repo head: git clone git://github.com/fgaz/polyvariadic.git
Uploaded by fgaz at 2017-12-19T09:08:32Z
Distributions
Reverse Dependencies 2 direct, 0 indirect [details]
Downloads 2761 total (20 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2017-12-19 [all 1 reports]

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"