Size: a a a

2021 March 31

L

Lierdakil in Haskell
Sooqa
Переслано от Sooqa
не могли ли бы вы подсказать врзможно ли както

class Contextual (container :: * -> [*] -> *)
class (∀a b (t :: a -> b -> *). Contextual t, Contains Fresh b ~ True)
  => Canonnical t

почему жшс орёт что б не в скоупе? и можно ли обращаться к [*]?
В общем я подумал немного и по-моему так совсем нельзя. Что b не определено это понятно, если записать ∀a b (t :: a -> b -> *). Contains Fresh b ~ True => Contextual t то b в скоупе. А то там же кортеж, а forall связывается с элементом кортежа. Но всё равно не получится, потому что b не kind, и DataKinds не промоутятся. Поэтому сослаться на b :: [*] в kind-сигнатуре уже нельзя.

Более того, если b :: [*], то значит b ~ '[x, y, z, ...]. Но это довольно абсурдный kind даже если бы он промоутился! b :: [*] не значит что b ~ [*].

Я так понимаю идея в том чтобы привязаться к конкретному typelevel списку. Так это сделать не получится, у container никакого списка ещё нет, он его только ждёт. И ведь любой подойдёт ему.
источник

S

Sooqa in Haskell
Lierdakil
В общем я подумал немного и по-моему так совсем нельзя. Что b не определено это понятно, если записать ∀a b (t :: a -> b -> *). Contains Fresh b ~ True => Contextual t то b в скоупе. А то там же кортеж, а forall связывается с элементом кортежа. Но всё равно не получится, потому что b не kind, и DataKinds не промоутятся. Поэтому сослаться на b :: [*] в kind-сигнатуре уже нельзя.

Более того, если b :: [*], то значит b ~ '[x, y, z, ...]. Но это довольно абсурдный kind даже если бы он промоутился! b :: [*] не значит что b ~ [*].

Я так понимаю идея в том чтобы привязаться к конкретному typelevel списку. Так это сделать не получится, у container никакого списка ещё нет, он его только ждёт. И ведь любой подойдёт ему.
Любой, который содержит тип фрэш.
источник

L

Lierdakil in Haskell
Sooqa
Любой, который содержит тип фрэш.
По kind-сигнатуре вообще любой. Ограничить kind-сигнатурой типы в списке нельзя, это уже какие-то dependent kinds получаются
источник

S

Sooqa in Haskell
Чтож, ждём в ghc 10
источник

S

Sooqa in Haskell
я хотел както так

data Fresh
data HasLoad

class Contextual (container :: * -> [*] -> *) where
  init :: container () '[Fresh]

class (∀a b (t :: a -> b -> *). Contextual t, Contains Fresh b ~ True)
  => Canonnical t where
  write :: v -> t l b -> t v (HasLoad : Remove Fresh b)
источник

AA

A64m AL256m qn<co... in Haskell
депендент кайндс же где-то с 6.6 по 8.0 появились, смотря как считать
источник

S

Sooqa in Haskell
A64m AL256m qn I0
депендент кайндс же где-то с 6.6 по 8.0 появились, смотря как считать
и куда они делись?
источник

AA

A64m AL256m qn<co... in Haskell
никуда не делись!
источник

S

Sooqa in Haskell
OwO
источник

Y

Yuuri in Haskell
Зигохистоморфный Препроморфизм
вопрос, есть CST есть AST имея идею ttg или hkd можно создать одну универсальную сущность?
Мне кажется, никак, ну или это будет очень сильное и бессмысленное натягивание одного на другое
источник

L

Lierdakil in Haskell
A64m AL256m qn I0
депендент кайндс же где-то с 6.6 по 8.0 появились, смотря как считать
Поясните глубину мысли. Я провёл аналогию с завтипами, что тип зависит от терма. Тут человек хочет чтобы кайнд зависел от типа. Насколько я знаю систему kind-ов -- это не работает. Вы с TypeInType не путаете?
источник

AA

A64m AL256m qn<co... in Haskell
почему не работает-то?
источник

L

Lierdakil in Haskell
A64m AL256m qn I0
почему не работает-то?
Да вот я выше написал.
источник

AA

A64m AL256m qn<co... in Haskell
ниче не понятно
источник

L

Lierdakil in Haskell
A64m AL256m qn I0
ниче не понятно
Ну стало быть Вы что-то сугубо своё имеете ввиду под dependent kinds :)
источник

к

кана in Haskell
Lierdakil
Поясните глубину мысли. Я провёл аналогию с завтипами, что тип зависит от терма. Тут человек хочет чтобы кайнд зависел от типа. Насколько я знаю систему kind-ов -- это не работает. Вы с TypeInType не путаете?
на типах полноценные завтипы есть, все будет работать

прям с пи, сигмой, завматчингом
источник

AA

A64m AL256m qn<co... in Haskell
Lierdakil
Ну стало быть Вы что-то сугубо своё имеете ввиду под dependent kinds :)
наоборот я имею в виду общее, а выше написано че-то свое
источник

L

Lierdakil in Haskell
кана
на типах полноценные завтипы есть, все будет работать

прям с пи, сигмой, завматчингом
"полноценных" ещё нет всё-таки. можно правда нахакать. но очень много бойлерплейта.
источник

к

кана in Haskell
Обнаружилось, что на тайплевел хаскеле есть полноценные зависимые типы, в намного большем смысле чем просто "можно писать a -> (x :: a) -> ..."

Продолжаю изучать в поисках ограничений

Примеры:

- натуральные числа и несколько простых доказательств о коммутативности сложения и умножения:
https://gist.github.com/kana-sama/9185b30b45bd9817f11361e424a8abc7

- простое доказательство (x / 2) * 2 = x для всех четный натуральных чисел:
https://gist.github.com/kana-sama/b029dfa1b1665b207259b58588659a1a

- сигма-типы и работа с ними (тот же безопасный Half :: Even -> Nat)
https://gist.github.com/kana-sama/bd3ec6ddc19846665d9d1f632483550a

для сборки нужен ghc 8.10+

Из проблем:
- отсутствие лямбд приводит к тому, что все функции вида f (\x -> y) превращаются в специализированные топлевел функции, который делают то же самое
источник

к

кана in Haskell
Lierdakil
"полноценных" ещё нет всё-таки. можно правда нахакать. но очень много бойлерплейта.
да где нет, если есть
источник