Vladislav
В нормальном языке ' быть не должно
A64m
это неприятно, но на такие жертвы можно пойти
Vladislav
Уж лучше List писать
A64m
тем более в хаскеле, который нормальным на тайплевеле если и будет, то в далеком будущем, и такого кода в нем будет минимум
A64m
т.е. на один ' тысячи List-ов будут
Ilya
Прекрасный хаскель будущего
A64m
короче говоря, в хаскеле платить уродствами на тайплевеле за удобства на велью-левеле нормально
A64m
просто сейчас тайплевел совсем адище, его надо хоть в немного вменяемое состояние привести
A64m
пусть ради одной строки на тысячи нетайплевельных
Vladislav
да кому тёрм-левел нужен вообще
Hithroc
Kirill
ну надож перл сделать, куда без регекспов
IC
Какое расширение даёт писать Type благословенный вместо б-гмерзкой *?
Denis
GHC 8
IC
Not in scope: type constructor or class ‘Type’
кана
{-# LANGUAGE DataKinds #-} import Data.Kind
IC
Странно... Хтоническая звезда то по дефолту доступна
A64m
и еще долго будет
IC
насколько Trees that grow переносимо на личные rpn-калькуляторы? не оверкил ли оно для всего, что не является GHC?
Timofey
А вот такой ещё вопрос: есть тип T с кайндом * -> *. А есть класс C, который требует кайнд параметра вида * -> * -> *. Я хочу сделать instance C T, как заигнорить одну из звёздочек в кайнде?
Timofey
или сказать, что первые две звезды будут одним и тем же типом
Алексей
А откуда такое неприятие звёздочки?
IC
но с чего ты взял, что оно тогда будет туда влезать?
A64m
очень странно, что то, от чего отказались для обычных типов использовали для кайндов
Timofey
но с чего ты взял, что оно тогда будет туда влезать?
условно говоря, тип T a изоморфен типу T' a () , который ожидает класс C
A64m
newtype Foo a b = Foo (T a)
кана
{-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-} import Data.Kind class C (f :: Type -> Type -> Type) data X a = X a newtype X' a b = X' (X a) instance C X'
Timofey
о, точно, спасибо
кана
А откуда такое неприятие звёздочки?
странный ничего не говорящий символ, тайп-левел умножение, есть намного более говорящий вариант Type
кана
еще многим (мне в том числе) он сначала давал неверную интуицию как о wildcard - то есть каинд вообще всех типов (а оказывается только возможнонаселенных)
A64m
да и не всех возможнонаселенных
Алексей
По мне они совершенно идентичны с точки зрения читаемости. Чисто графически звёздочка мне импонирует даже больше, если бы она не конфликтовала с операторами
IC
Почему звёздочка, а не, там %?
A64m
проблемы с читаемостью и у меня не было
A64m
а почему %?
IC
а почему *?
Алексей
Почему звёздочка, а не, там %?
Так сложилось исторически, плюс * выглядит симпатичней
A64m
наверное, из-за миранды и старого эмеля
Алексей
Олсо почему Type, а не Ty?
IC
> выглядит симпатичней привычней
A64m
правда там звездочки - это параметры
IC
Олсо почему Type, а не Ty?
Почему Алексей Худяков, а не АХу?
A64m
Олсо почему Type, а не Ty?
да, длинновато, но Ty мне не нравится
A64m
вообще не очень люблю сокращения такого типа
Алексей
Ну вопрос был троллирующий
A64m
T или там U или S
A64m
U -> U -> U
A64m
но можно же будет самому написать type U = Type и все
кана
U мне нравился вариант
кана
довольно распространен
Alexander
T хорошо, притащит много окамлеров
IC
T хорошо, притащит много окамлеров
вы ещё скалистов позовите
Alexander
это к оо-хаскель
Alexander
и ете
A64m
не, окамлерам такое не понравится
IC
это к оо-хаскель
ОО - моя идиома! #извинити
A64m
по окамловски было бы import qualified Data.Kinds as Kind -- и дальше Kind.T
IC
require Data.Kinds; Kinds.T
A64m
тогда уж Kinds.t
A64m
но в хаскеле так нельзя, так что не понравится все равно
Denis
звезда норм
Denis
чем вам звезда не угодила
Denis
она на три символа эффективнее
Oleg
T тоже фиговая
IC
чем вам звезда не угодила
почему не % или не $?
Oleg
типа намёк на Top который ()
Denis
$ -> $ это для успешных
IC
почему не % или не $?
почему пятиконечная в конце концов?!
A64m
почему не % или не $?
видимо потому что в миранде и старом эмеле писали сигнатуры вроде (* -> **) -> [*] -> [**]
A64m
ну и кайнд ? и сейчас есть
Oleg
Но, если я правильно помню, жалобу на звезду, там никакой символ не устроит
IC
видимо потому что в миранде и старом эмеле писали сигнатуры вроде (* -> **) -> [*] -> [**]
это только откладывает вопрос на один шаг. почему в миранде и старом эмеле выбрали *?
A64m
ну это были параметры, т.е. в каком-то смысле интуиция про вайлдкард правильная, именно такая и планировалась исторически