The polyvariadic package

[ Tags: bsd3, data, library ] [ Propose Tags ]

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


[Skip to Readme]

Properties

Versions 0.3.0.0, 0.3.0.1, 0.3.0.2, 0.3.0.3
Change log ChangeLog.md
Dependencies base (>=4.7 && <4.11), containers (>=0.1 && <0.6), semigroups (==0.18.*) [details]
License BSD3
Copyright (C) Francesco Gazzetta 2017
Author Francesco Gazzetta
Maintainer francygazz@gmail.com
Category Data
Home page https://github.com/fgaz/polyvariadic
Source repository head: git clone git://github.com/fgaz/polyvariadic.git
Uploaded Tue Dec 19 17:37:54 UTC 2017 by fgaz
Distributions NixOS:0.3.0.3
Downloads 672 total (455 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2017-12-19 [all 1 reports]
Hackage Matrix CI

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for polyvariadic-0.3.0.3

[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"