Описание тега scrap-your-boilerplate

This Haskell package contains the generics system described in the Scrap Your Boilerplate papers. It defines the Data class of types permitting folding and unfolding of constructor applications, instances of this class for primitive types, and a variety of traversals.
1 ответ

Разрешает ли текущий SYB расширение обобщенных функций новыми типами?

Первые две статьи Scrap Your Boilerplate описывают способ написания универсальных функций, которые работают для общих типов, но имеют особые случаи для конкретных типов. Например, fromJSON от aeson пакет, определяет универсальную функцию для преобр…
2 ответа

Получение экземпляра функтора, а не последнего аргумента типа

Связанный с этим вопросом, который я задал ранее сегодня. У меня есть тип данных AST с большим количеством случаев, который параметризуется типом "аннотации" data Expr ann def var = Plus a Int Int | ... | Times a Int Int deriving (Data, Typeable, Fu…
1 ответ

Посещение GHC AST с SYB

Я написал программу, которая посетила AST с Haskell-src-exts. Я пытаюсь преобразовать его, чтобы использовать GHC API. Первый использует Uniplate, в то время как для второго кажется, что, к сожалению, я вынужден использовать SYB (документация ужасно…
1 ответ

Получение экземпляров по умолчанию с использованием GHC.Generics

У меня есть класс типов Cyclic для которого я хотел бы иметь возможность предоставить общие экземпляры. class Cyclic g where gen :: g rot :: g -> g ord :: g -> Int Учитывая тип суммы нулевых конструкторов, data T3 = A | B | C deriving (Generic…
1 ответ

Понимание типа оператора приведения в Scrap Your Boilerplate

В документе Scrap Your Boilerplate 2003 года от Laemmel и SPJ приведен фрагмент кода на странице 3. mkT :: (Typeable a, Typeable b) => (b -> b) -> a -> a mkT f = case cast f of Just g -> g Nothing -> id а затем статья объясняет То …
07 июл '12 в 13:10
3 ответа

Общее программирование в Haskell с SYB и специальным полиморфизмом

У меня есть класс, идентичный Show, и я хотел бы создать экземпляр этого класса для каждого типа кортежа. Обычно это делается путем написания отдельных экземпляров для каждого типа кортежа. instance (Show a, Show b) => Show (a,b) where showsPrec …
27 дек '13 в 18:51
4 ответа

Безотказная аннотация AST в Haskell?

Я возился с компилятором Elm, который написан на Haskell. Я хотел бы начать реализацию некоторых оптимизаций для него, и часть этого включает обход AST и добавление "аннотации" к определенным узлам, таким как хвостовые вызовы и т. Д. Я знаю, что мог…
2 ответа

Обход полиморфных структур и выполнение преобразования только в нескольких случаях

Предположим, мы представляем иерархию компании следующим образом: {-# LANGUAGE DeriveDataTypeable #-} import Data.Data import Data.Generics.Aliases import Data.Generics.Schemes data CompanyAsset = Employee Name Salary | Plant Name | Boss Name Perfor…
1 ответ

Избегайте шаблонов, которые не являются частью класса Haskell

Я разрабатываю рамки для экспериментов с искусственной жизнью. Каркас может поддерживать несколько видов, если каждый вид является экземпляром класса Agent. Я обертываю каждого агента в AgentBox, чтобы я мог читать, писать и использовать их, не зная…
4 ответа

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

Я ищу функцию, которая, учитывая необходимый тип возвращаемого значения, будет возвращать часть параметра продукта, которая соответствует этому типу, основываясь исключительно на структуре типа, переданного функции. Например: data MyProduct = MyProd…
1 ответ

Resharper 6 живых шаблонов для разработчика CQRS

В списке ddd-cqrs была некоторая болтовня о людях, использующих живые шаблоны Resharper, чтобы помочь позаботиться о шаблонном коде, который вы получаете при работе с CQRS dev. Это лучший способ преодолеть шаблонное безумие, и есть ли у кого-то, чем…
2 ответа

Преобразовать из типа `T a` в`T b` без шаблона

Итак, у меня есть тип данных AST с большим количеством случаев, который параметризуется типом "аннотации" data Expr a = Plus a Int Int | ... | Times a Int Int У меня есть типы аннотаций S а также Tи некоторые функции f :: S -> T, Я хочу взять Exp…
2 ответа

Отношения между TypeRep и "Type" GADT

В Scrap your Boilerplate reloaded авторы описывают новую презентацию Scrap Your Boilerplate, которая должна быть эквивалентна оригиналу. Однако одно отличие состоит в том, что они предполагают конечный замкнутый набор "базовых" типов, закодированных…
01 мар '13 в 14:46
0 ответов

Производный тип для Text.PrettyPrint.Doc

У меня есть тип AST, который я хочу вывести как Typeable, так что я могу сделать его общий обход Scrap-your-шаблонный. Тем не менее, дерево снабжено сообщениями в Doc тип библиотеки Text.PrettyPrint из симпатичного пакета. Чтобы получить Typeable, д…
2 ответа

Data.Data - создание dataCast1 для конструктора типа arity 2 (частично специализированного)

Таким образом, Data.Map имеет dataCast2 определено, что имеет смысл, так как имеет конструктор типа arity 2. dataCast1 по умолчанию const Nothing, dataCast2 легко определяется как gcast2, Для справки: class Typeable a => Data a where dataCast1 ::…
01 дек '10 в 00:00
2 ответа

Haskell's Scrap Your Boilerplate (SYB) - применение преобразования только один раз, а не везде

Какой лучший способ применить преобразование к дереву только один раз вместо everywhere используя SYB? Например, в следующем упрощенном выражении есть несколько случаев Var "x"и я хочу заменить первый экземпляр Var "y" только. data Exp = Var String …
4 ответа

Что такое Haskell's Data.Typeable?

Я встречал ссылки на Хаскелла Data.Typeable, но мне не понятно, почему я хотел бы использовать его в своем коде. Какую проблему это решает и как?
1 ответ

Преимущества SYB (откажитесь от ваших шаблонов) перед GHC Generics

Есть ли какие-либо задачи, которые возможны только с SYB, или намного проще с ним, по сравнению с GHC Generics?
1 ответ

Соскрести свой шаблон

Что касается SYB, я новичок в этом Я попытался выкрутить код, чтобы получить переменные в выражении с кодом variables = removeDuplicate $ (everything (++) ([] `mkQ` f)) where f (ExprVar st) = [st] f _ = [] где removeDuplicate выявляет повторяющиеся …
07 ноя '14 в 07:13
0 ответов

Отказ от шаблонной замены переменных в выражении

Предположим, у нас есть следующая структура данных, значения которой представляют выражения на некотором языке: data BExpr = Stop | Guard Expr BExpr | Choice BExpr BExpr | Parallel BExpr BExpr | Disable BExpr BExpr -- ... and so on. | Act Expr data …