polyvariadic: Creation and application of polyvariadic functions

[ bsd3, data, library ] [ Propose Tags ]

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

[Skip to Readme]
Versions [RSS] [faq],,,, (info)
Change log ChangeLog.md
Dependencies base (>=4.7 && <4.11), containers (>=0.1 && <0.6), semigroups (==0.18.*) [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 NixOS:
Downloads 2259 total (22 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2017-12-19 [all 1 reports]




Maintainer's Corner

For package maintainers and hackage trustees


Readme for polyvariadic-

[back to package description]


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))
>>> printf' "aaa%bbb%ccc%ddd" "TEST" 123 True