Вопросы по теме '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 просмотров
schedule
12.06.2023
Подтипы коллекций - принцип подстановки Лисков
Java не допускает Collection<Car> в качестве подтипа Collection<Vehicle> . Это потому, что Collection<Car> нельзя использовать вместо каждого Collection<Vehicle> , поскольку Collection<Vehicle> может содержать...
550 просмотров
schedule
24.01.2024
Где спецификация 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 просмотров
schedule
02.04.2023
Переопределение оператора для использования производного класса в C++
Я пытаюсь переопределить оператор виртуального сравнения в подклассе, но получаю ошибку компилятора, говорящую о том, что производный класс не реализует виртуальный оператор базового класса.
У меня такое ощущение, что это связано с тем, что мой...
1340 просмотров
schedule
27.04.2022
Является ли разрешение немаркированных объединений эквивалентным разрешению классов типов?
В этом вопросе объединения без тегов описываются как форма подтипа.
Классы типов также являются формой подтипирования.
Являются ли они концептуально эквивалентными? Да, они есть, как бы я реализовал их в 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 просмотров
schedule
25.10.2023
В чем разница между зависимостью класса типа в 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 просмотров
schedule
03.01.2024
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 просмотров
schedule
11.04.2023
Что означает этот фрагмент кода 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