Вопросы по теме 'subtyping'

Классы типов и подтипы
У меня есть следующий код, определяющий класс типа. trait Foo[T] { def toFoo(x: T): String } trait Foos { def toFoo[T](f: T => String): Foo[T] = new Foo[T] { def toFoo(x: T): String = f(x) } } object Foo extends Foos { def...
261 просмотров
schedule 30.10.2022

Использование типов данных в Haskell
Я начал этот новый вопрос, поскольку он стал продолжением моего предыдущего вопроса. Если у меня есть два типа данных, которые состоят из похожих конструкторов: data A = X | Y | Z data B = X | Y я никак не могу как-то представить это как:...
248 просмотров
schedule 08.04.2022

Создание экземпляров класса ковариантного типа из экземпляров нековариантного класса
Предположим, у меня есть класс простого типа, экземпляры которого дадут мне значение некоторого типа: trait GiveMeJustA[X] { def apply(): X } И у меня есть несколько примеров: case class Foo(s: String) case class Bar(i: Int) implicit...
686 просмотров

Подтипы коллекций - принцип подстановки Лисков
Java не допускает Collection<Car> в качестве подтипа Collection<Vehicle> . Это потому, что Collection<Car> нельзя использовать вместо каждого Collection<Vehicle> , поскольку Collection<Vehicle> может содержать...
550 просмотров

Где спецификация Java говорит, что List‹T› присваивается List‹? супер Т›?
Предположим, что класс B наследуется от класса A . Ниже приведена легальная Java: List<A> x; List<? super B> y = x; С точки зрения спецификации это означает, что List<A> присваивает List<? super B> . Однако у...
281 просмотров
schedule 01.01.2023

Почему forall a. а не считается подтипом Int, в то время как я могу использовать выражение типа для всех а. а где-нибудь ожидается один типа Int?
Рассмотрим следующую пару определений функций, которые проходят проверку типов: a :: forall a. a a = undefined b :: Int b = a т.е. выражение типа forall a. a может использоваться там, где ожидается выражение типа Int . Мне кажется, что...
721 просмотров

Переопределение оператора для использования производного класса в C++
Я пытаюсь переопределить оператор виртуального сравнения в подклассе, но получаю ошибку компилятора, говорящую о том, что производный класс не реализует виртуальный оператор базового класса. У меня такое ощущение, что это связано с тем, что мой...
1340 просмотров

Является ли разрешение немаркированных объединений эквивалентным разрешению классов типов?
В этом вопросе объединения без тегов описываются как форма подтипа. Классы типов также являются формой подтипирования. Являются ли они концептуально эквивалентными? Да, они есть, как бы я реализовал их в Haskell?
354 просмотров
schedule 03.11.2022

Реализация подтипа полиморфного варианта не соответствует сигнатуре
У меня есть следующий код: module Test : sig type +'a t val make : int -> [< `a | `b] t end = struct type 'a t = Foo of int | Bar of string let make = function | 0 -> (Foo 0 : [`a] t) | _ -> (Bar "hi" : [`a] t) end...
398 просмотров
schedule 08.03.2023

Есть ли в Scala ограничение по значению, такое как ML, если нет, то почему?
Вот мои мысли по этому вопросу. Может ли кто-нибудь подтвердить, опровергнуть или уточнить? Я написал : Scala не объединяет ковариант List[A] с GLB ⊤, назначенным на List[Int] , bcz afaics в подтипах " biunification " имеет...
399 просмотров

В чем разница между зависимостью класса типа в haskell и подтипом в ООП?
Мы часто используем зависимость типа от класса для эмуляции отношения подтипа. e.g: когда мы хотим выразить отношение подтипов между Animal, Reptile и Aves в ООП: abstract class Animal { abstract Animal move(); abstract Animal...
527 просмотров
schedule 14.07.2022

Вызов объединений типов функций в TypeScript
В TypeScript 3.0.3 следующий код выдаст ошибку времени компиляции: function f() { if (true) { return (x: {left:String}) => x.left; } else { return (x: {right:String}) => x.right; } } class C { left: String =...
380 просмотров

Scala для понимания с Option и Some, завернутый в ReaderT
Вот пример, который отлично работает: import cats.data.ReaderT import cats.instances.option._ ... def f1:ReaderT[Option, Service, Int] = ReaderT(service => for { res <- Some(10) } yield res ) Вот пример, который не...
64 просмотров

Что означает этот фрагмент кода Scala, обучающий полиморфизму подтипов?
Следующее взято из документа ScalaZ, когда я изучаю полиморф подтипа в Scala. scala> trait Plus[A] { def plus(a2: A): A } defined trait Plus scala> def plus[A <: Plus[A]](a1: A, a2: A): A = a1.plus(a2) plus: [A <:...
80 просмотров
schedule 12.04.2023