Публикации по теме 'algebraic-data-types'


Алгебраические типы данных
Краткое содержание «Алгебраические типы данных» или «ADT» — это любой тип данных, созданный комбинацией других типов данных. Они полезны для создания типов данных, которые имеют столько же значений, сколько и явления реального мира, но не полностью представлены целым числом, таким как день недели или код клавиши с клавиатуры. Не имеет смысла делать недопустимые состояния представимыми, и мы не хотим застревать на проверке правильности наших данных в соответствии с нашим типом во время..

Я уже давно пишу подключаемый модуль проверки типов во время выполнения для Javascript.
Я уже давно пишу подключаемый модуль проверки типов во время выполнения для Javascript. Я использую кодировку Скотта и (неявные) типы ранга 2 для выражения безопасных типов ADT в Javascript. Вот небольшой набросок рекурсивного типа List , который вы упомянули в своем посте: import * as F from ".../ftor.js"; F.type(true); const List = F.Adt( function List() {}, "(List :: ({Cons: (a -> List<a> -> r), Nil: r} -> r) -> List<a>)" ); const Nil =..

Вопросы по теме 'algebraic-data-types'

Алгебраические типы данных вне функциональных языков?
Какие языки, которые не являются исключительно функциональными, имеют алгебраические типы данных (или что-то подобное) и сопоставление с образцом? Меня также интересуют языки с несколькими парадигмами - я знаю, что Ocaml и F # - это диалекты ML с...
2007 просмотров

Каково значение алгебраических типов данных с нулевыми конструкторами?
Этот отрывок, в котором, к сожалению, отсутствуют ссылки, о разработке АТД в Haskell из История Haskell: лень с классом , раздел 5.1: В общем, алгебраический тип определяет сумму одной или нескольких альтернатив, где каждая альтернатива...
356 просмотров
schedule 25.07.2022

алгебраический тип данных для дерева
Я пытаюсь построить дерево, в котором его дочерние элементы представлены в списке. Каждый из дочерних элементов может быть поддеревом и т. д. Итак, я иду по этому пути — data Children a = NoChildren | Cons a (Children a) deriving (Show, Read,...
235 просмотров
schedule 19.12.2022

С++ эквивалент алгебраического типа данных?
Скажем, у меня есть этот код Haskell: data RigidBody = RigidBody Vector3 Vector3 Float Shape -- position, velocity, mass and shape data Shape = Ball Float -- radius | ConvexPolygon [Triangle] Как лучше всего выразить это на С++?...
9293 просмотров
schedule 13.02.2023

Инкапсулировать шаблон сопутствующего баннера за аннотацией + макрос
Я использую ADT, которые можно создать только после этапа проверки (что является обычной практикой в ​​FP для обеспечения правильности). В качестве примера я использую тип Score поверх Double , который проверяет, что его значение в оболочке...
33 просмотров

Как управлять предполагаемым типом для связанных переменных при сопоставлении с образцом при наличии типов более высокого типа
(это основано на статье на http://bertails.org/2015/02/15/abstract-алгебраических-данных-типа ) Во-первых, я определяю абстрактную версию scala.Option . import scala.language.higherKinds trait OptionSig { type Option[+_] type Some[+A]...
179 просмотров

Комбинированный тип = один, другой или оба?
Мне интересно, возможно ли это в Haskell: type DateTime = Date | Time | Date :+ Time ...так что это может быть конкретная дата, конкретное время или комплексное значение, состоящее из того и другого.
103 просмотров
schedule 11.02.2023

Сумма или тип продукта?
Учитывая следующий алгебраический тип данных : scala> sealed trait Person defined trait Person scala> case class Boy(name: String, age: Int, x: String) extends Person defined class Boy scala> case class Girl(name: String, age: Int, y:...
2075 просмотров
schedule 23.10.2022

Haskell Lambda fold
У меня есть следующий алгебраический тип данных, представляющий лямбда-исчисление в Haskell: data LExpr = Var String -- variable | App LExpr LExpr -- function application | Lam String LExpr -- Lambda abstraction...
501 просмотров

Расширение алгебраического типа данных
Примечание: если этот вопрос несколько странный, то это потому, что я только недавно познакомился с Haskell и все еще адаптируюсь к функциональному мышлению. Учитывая тип данных, такой как Maybe : data MyOwnMaybe a = MyOwnNothing | MyOwnJust...
234 просмотров
schedule 22.03.2023

как я могу показать дерево вывода в Haskell?
Я работаю над упражнением, которое строит дерево вывода языка while. Моя реализация языка while состоит из алгебраических типов данных, таких как «Aexp» (арифметические выражения), «Bexp» (логические выражения) и «Stm» (операторы): type Var =...
373 просмотров

Можно ли создать представление общих АТД на уровне типов?
Используя кодировку Черча, можно представить любой произвольный алгебраический тип данных без использования встроенной системы АТД. Например, Nat можно представить (пример в Идрисе) как: -- Original type data Nat : Type where natSucc : Nat...
231 просмотров

Автоматическое получение ограничений класса типов с помощью GADT
Я пишу библиотеку для работы с бесконечными последовательностями, используя ленивую оценку. Для краткости я использую обобщенные алгебраические типы данных (GADT), чтобы установить ограничение Ord для индекса каждого термина в последовательности....
91 просмотров

Путаница типов/видов в Haskell (возможно) в алгебраических типах данных
Я работаю над созданием своего собственного симулятора Diplomacy на Haskell, чтобы намочить ноги. . Я считаю, что придумал достойное определение того, что такое заказ: data Order = Hold Unit Territory | Move Unit Territory...
67 просмотров

Как декодировать ADT с помощью circe, не устраняя неоднозначность объектов
Предположим, у меня есть такой ADT: sealed trait Event case class Foo(i: Int) extends Event case class Bar(s: String) extends Event case class Baz(c: Char) extends Event case class Qux(values: List[String]) extends Event Общий вывод по...
6581 просмотров

Сопоставление с образцом для алгебраических типов данных
Это открытый вопрос, но мне так и не удалось найти решение, которое меня удовлетворило бы. Скажем, у меня есть этот алгебраический тип данных: type t = A of int | B of float | C of string Теперь предположим, что я хочу написать функцию...
466 просмотров

Вложенный алгебраический тип данных Haskell
Я пытаюсь смоделировать следующий простой Scala ADT в Haskell: sealed trait Value sealed trait Literal < Value case object Null extends Literal case class IntLiteral(value: Int) extends Literal case class Variable(name: String) < Value...
557 просмотров
schedule 06.11.2022

Почему типы суммы называются типами суммы?
В процессе изучения Haskell я читал об алгебраических типах данных, типах сумм и типах произведений. Хотя типы произведения аналогичны декартову произведению, и слово «произведение» сразу же приобрело для меня смысл, я не понимаю, почему типы суммы...
189 просмотров

Интерпретация AST в Python 3.6: isinstance, исправление обезьян, vs. Visit_NodeType, макросы?
Предположим, что я хочу написать крошечный интерпретатор, который может вычислять выражения с бинарной операцией Plus , унарной операцией Negate и целочисленными константами. В настоящее время меня интересует только интерпретация AST, поэтому...
129 просмотров

Как создать ADT в Haskell?
В Scala я могу описать такой ADT: sealed trait Foo case class A(a: Int) extends Foo case class B(b: String) extends Foo case class C(a: A, b: B) extends Foo Как я могу сделать то же самое в Haskell? data Foo = A Int | B String | C A B...
965 просмотров
schedule 13.06.2022