vargs-0.1.0.0

Copyright(c) Wardopdem 2017
LicenseGPL-3
Maintainerwardopdem@gmail.com
Stabilityexperimental
Portabilitynon-portable (GHC extesions)
Safe HaskellNone
LanguageHaskell2010

Data.Function.Vargs

Contents

Description

Types and functions for gereration declarations for realizations variable number of function parameters.

Synopsis

Функция для реализации переменнго числа параметров.

defVargsFun Source #

Arguments

:: ArgProc a 
=> String

Имя для создаваемой функции

-> [Name]
  • Список имён функций, на основе которых строится функция с переменным числом параметров все функции должны:
  • - иметь простые (не полиморфные) типы параметров и результата;
  • - иметь идентичные типы параметров
  • - иметь уникальный тип возврата
-> a

Далее следует произвольное количество значениq типов класса InstSrc

Генератор деклараций для реализации переменного числа параметров - основная экспортируемая функция (с переменным числом параметров).

Классы и типы для реализации механизма переменного числа параметров

type InstMaker = Type -> Type -> Name -> DecsQ Source #

Генератор деклараций экземпляров [InstanceD]

  • :: класс
  • -> тип
  • -> метод
  • -> декларации экземпляров

type InstMakerQ = Q InstMaker Source #

InstMaker завёртнутый в манаду цитирования Q

class InstSrc a where Source #

Класс типов, на основе которого можно построить процедуру генерации деклараций экземпляров [InstanceD]

Minimal complete definition

toMaker

Methods

toMaker :: a -> InstMakerQ Source #

Instances

InstSrc [Name] Source #

Генератор деклараций экземпляров по списку имён типов вида [''Integer, ''Double, ...]. Подразумевается, что тип элементов списка параметров имеет единственный конструктор с единственным аргументом (тип-обёртка) - этот конструктор и используется в качестве "тела" метода создания значений из исходных типов

Methods

toMaker :: [Name] -> InstMakerQ Source #

InstSrc ([Name], ExpQ) Source #

Генератор деклараций экземпляров по парам вида: ([''Type1, ''Type2, ...], [| expr |])

Methods

toMaker :: ([Name], ExpQ) -> InstMakerQ Source #

InstSrc (TypeQ, ExpQ) Source #

Генератор деклараций экземпляров по парам вида: ([t| [Int] |], [| expr |])

InstSrc (Name, ExpQ) Source #

Генератор деклараций экземпляров по парам вида: (''Type, [| expr |])

InstSrc (Genz, ExpQ) Source #

Для пар вида (Genz [t| ... |], [| expr |]). Строит генератор экземпляров вида a ~ T1, b ~ T2, ... => C a b ... где Ti - тип вида Tp T1 T2 ... (например Double -> Double -> Double)

class ArgProc a where Source #

Реализация переменного числа параметров функции defVargsFun

Minimal complete definition

prc

Methods

prc :: String -> [Name] -> [InstMakerQ] -> a Source #

Реализация механизма накопления/обработки параметров типа InstMakerQ

Instances

ArgProc DecsQ Source #

Терминальный экземпляр - запускает генерацию всех необходимых деклараций по фиксированным параметрам и списку генераторов деклараций экземпляров (InstMaker)

Methods

prc :: String -> [Name] -> [InstMakerQ] -> DecsQ Source #

(InstSrc a, ArgProc r) => ArgProc (a -> r) Source #

"Магия" переменного числа параметров

Methods

prc :: String -> [Name] -> [InstMakerQ] -> a -> r Source #

newtype Genz Source #

Обёртка для декларации необходимости генерации "обобщённого" экзепляра вида

a ~ T1, b ~ T2 => C a b ...

Constructors

Genz TypeQ 

Instances

InstSrc (Genz, ExpQ) Source #

Для пар вида (Genz [t| ... |], [| expr |]). Строит генератор экземпляров вида a ~ T1, b ~ T2, ... => C a b ... где Ti - тип вида Tp T1 T2 ... (например Double -> Double -> Double)