Size: a a a

2020 July 07

JS

Jerzy Syrowiecki in Haskell
Jerzy Syrowiecki
а также IsString
тогда можно будет урлы фигачить прямо строками и валидность проверять неявно
источник

a

adam in Haskell
Имеется простая тайп фемили

type family Conc (a :: [*]) (b :: [*]) = (r :: [*]) | r -> a b
type instance Conc a '[] = a
type instance Conc a (x ': xs) = x ': Conc a xs


Проблема заключается в том, что благодаря зависимости тайпчекер падает с

RHS of injective type family equation is a bare type variable
 Conc a '[] = a


Что не удивительно, так как у нас нет никаких гарантий что тайпфемили тотальны, однако задача как раз и заключается в то, что нужно как-то построить Conc с пруфом что r зависит от a и b, это вообще возможно?
источник

DR

Denis Redozubov in Haskell
инъективные ТФ в текущей реализации не могут несколько параметров после | иметь, насколько я помню
источник

JS

Jerzy Syrowiecki in Haskell
adam
Имеется простая тайп фемили

type family Conc (a :: [*]) (b :: [*]) = (r :: [*]) | r -> a b
type instance Conc a '[] = a
type instance Conc a (x ': xs) = x ': Conc a xs


Проблема заключается в том, что благодаря зависимости тайпчекер падает с

RHS of injective type family equation is a bare type variable
 Conc a '[] = a


Что не удивительно, так как у нас нет никаких гарантий что тайпфемили тотальны, однако задача как раз и заключается в то, что нужно как-то построить Conc с пруфом что r зависит от a и b, это вообще возможно?
в этой формуле из r не выводится a b
источник

JS

Jerzy Syrowiecki in Haskell
а зачем здесь эта зависимость?
источник

a

adam in Haskell
Jerzy Syrowiecki
а зачем здесь эта зависимость?
чтобы можно было матчить по этому сплиту и выводить a и b в локальный скоуп
источник

к

кана in Haskell
adam
Имеется простая тайп фемили

type family Conc (a :: [*]) (b :: [*]) = (r :: [*]) | r -> a b
type instance Conc a '[] = a
type instance Conc a (x ': xs) = x ': Conc a xs


Проблема заключается в том, что благодаря зависимости тайпчекер падает с

RHS of injective type family equation is a bare type variable
 Conc a '[] = a


Что не удивительно, так как у нас нет никаких гарантий что тайпфемили тотальны, однако задача как раз и заключается в то, что нужно как-то построить Conc с пруфом что r зависит от a и b, это вообще возможно?
не понимаю,

вот имею результат '[1, 2, 3]

какие соответствия a и b?
источник

к

кана in Haskell
я по твому определению вижу аж 2 варианта
источник

к

кана in Haskell
у тебя неверная зависимость, я к этому веду
источник

a

adam in Haskell
я понял, да
источник

a

adam in Haskell
однако
источник

JS

Jerzy Syrowiecki in Haskell
adam
чтобы можно было матчить по этому сплиту и выводить a и b в локальный скоуп
но это невозможно

пусть справа x : Conc a xs, тогда слева либо Conc (x : Conc a xs) [], либо Conc a (x : xs), нет однозначности
источник

к

кана in Haskell
вроде бы все зависимости для такого тела:
a b -> r (бессмысленная зависимость, так как семейства это функции, а все функции по определению обладают такой зависимостью)
a r -> b
b r -> a
источник

к

кана in Haskell
adam
Имеется простая тайп фемили

type family Conc (a :: [*]) (b :: [*]) = (r :: [*]) | r -> a b
type instance Conc a '[] = a
type instance Conc a (x ': xs) = x ': Conc a xs


Проблема заключается в том, что благодаря зависимости тайпчекер падает с

RHS of injective type family equation is a bare type variable
 Conc a '[] = a


Что не удивительно, так как у нас нет никаких гарантий что тайпфемили тотальны, однако задача как раз и заключается в то, что нужно как-то построить Conc с пруфом что r зависит от a и b, это вообще возможно?
> с пруфом что r зависит от a и b, это вообще возможно?
а кек, это по дефолту уже

зависимость простая, для любых a и b, r = Conc a b
источник

DR

Denis Redozubov in Haskell
Jerzy Syrowiecki
в этой формуле из r не выводится a b
тут конкретно - нет, но это в целом в GHC недореализовано
источник

JS

Jerzy Syrowiecki in Haskell
кана
> с пруфом что r зависит от a и b, это вообще возможно?
а кек, это по дефолту уже

зависимость простая, для любых a и b, r = Conc a b
вероятно, автор хотел сказать наоборот
источник

JS

Jerzy Syrowiecki in Haskell
кана
вроде бы все зависимости для такого тела:
a b -> r (бессмысленная зависимость, так как семейства это функции, а все функции по определению обладают такой зависимостью)
a r -> b
b r -> a
вот последние 2 строчки самые полезные, по-моему
источник

к

кана in Haskell
НО, вроде бы у тайпфемели нельзя указывать несколько фандепов, но нужно проверить
источник

ЗП

Зигохистоморфный Пре... in Haskell
я уже вроде задавал вопрос, но ответа не получал)
так вот как можно заменить это на что-то типа coerce?

https://gist.github.com/xgrommx/e828cb7c9e96f4283b41e6c154d87149#file-alg2-hs-L13-L22
источник

АГ

Александр Гранин... in Haskell
А кто-нибудь читал A type of programming? Меня озадачивает, что автор пишет и пишет, и я не понимаю по отрывкам, о чем эта книга
источник