Андрей
так же и регулярки и тд и тп
кана
Text в твоем Path - не тип
Зигохистоморфный
Андрей
и если я сумирую типы, то эти конструкторы никуда не деваются, так?
Aleksei (astynax)
нельзя матчить по конструкторам разных типов. Только через суппу этих типов
кана
data Path = Text2 | Route2 - это РОВНО то же самое, что ты писал выше
Aleksei (astynax)
Андрей
я не могу сумировать чужие типы?
кана
можно, но нужна метка
Андрей
ахмлять
кана
почитай в вики про помеченую сумму множеств
Aleksei (astynax)
Either Text Regexp - сумма чужих типов
Aleksei (astynax)
Сумма чужих типов, это тип. Чтобы тип мог существовать в виде значения, у него должен быть конструктор
Андрей
parket
я не могу сумировать чужие типы?
Оберни чужие типы в свои конструкторы и проссумируй. Получишь свой тип - сумму чужих. На этом типе объяви функцию. Всё.
кана
data Path = Text Text | Route Route Text «123» :: Path - это значение Text с меткой Text, имеет тип Path
Aleksei (astynax)
Так человеку хочется сумму без оборачивания в тип!
Aleksei (astynax)
У нас в хаскеле такого нет
кана
ух, мак еще и ковычки меняет, ужасно
Aleksei (astynax)
f :: Text | Regex -> foo у нас нельзя
кана
возможно, с flow пришел, там есть сумма множеств
кана
больше я такого нигде не видел)
parket
Ну, мы можем объявить тайпкласс. Но думаю выше предлагали
Aleksei (astynax)
Предлагали
Aleksei (astynax)
Даже семейки предлагали и прочие зависимости
parket
Что с тайпклассом не так? :) Оно и будет. Полиморфная функция.
Зигохистоморфный
Не тратьте на него время, просто пусть осознает изоморфизмы в множестве и если не тупой, то больше не задаст таких вопросов
Aleksei (astynax)
Что с тайпклассом не так? :) Оно и будет. Полиморфная функция.
не получится в одном выражении методы разных инстансов поюзать, к чему автор, видимо, стремился
parket
Получится. Через RankNTypes
Aleksei (astynax)
Ну меставми подхачить можно, канешн :)
Андрей
хотя выглядит как "масло масленое"
Aleksei (astynax)
Конструкторы живут не в том неймспейсе, в котором живут типы, поэтому одно и то же имя у типа и у конструктора - это две большие разницы
доня.
на instance Match Route Path where p =~ t @ Text = t == p p =~ r @ Regexp = rmatch r p компилятор ругается как-то иначе)
просто мимо проходя хотел сказать что как мне кажется операторы в тайпклассах - плохо ящитаю лучше как в пурсовых стандартных либах, в тайпклассах функции с нормальными ascii-именами, а уже дальше для них можно прикрутить инфиксные алиасы
Aleksei (astynax)
data Path = Text Text -- ^конструктор ^тип-параметр
кана
первый Text может иметь любое имя
Андрей
Not in scope: type constructor or class ‘Regex’ A data constructor of that name is in scope; did you mean DataKinds? Perhaps you meant ‘Regex.Regex’ (imported from Text.Regex.TDFA) | 19 | data Path = Text Text | Regex Regex deriving (Eq)
Андрей
щас стол переверну
Андрей
и как бы всё понятно и он прав, но какже зае
Aleksei (astynax)
Какой тип у регулярок, кторые у вас используются?
Aleksei (astynax)
Вот он то и будет параметром у конструктора Regex ваш_тип
Aleksei (astynax)
Грубо говоря data ChiselkaIliStroka = Chiselka Int | Stroka String понятно, что Int и String долны быть известными типами
Aleksei (astynax)
Вам сказали Regexp Regexp, полагая (из вашего же кода), что у вас где-то импортируется тип Regexp. Но это не так, судя по тому, что сообщает компилятор
Зигохистоморфный
Все эти тайпклассы лишь рекорды) почитайте Киселева
Зигохистоморфный
Как в кубике ща
Aleksei (astynax)
> операторы в тайпклассах - плохо иногда бывает сложно придумать имя, вот и городят "загогулины" :) Проблема нейминга же
доня.
> операторы в тайпклассах - плохо иногда бывает сложно придумать имя, вот и городят "загогулины" :) Проблема нейминга же
с одной стороны да, с другой потом проще читать, ну если это не что-то совсем тривиальное типа == в Eq
Aleksei (astynax)
lensUpdateStatefullyWithFunctionIfItImplementsMonoid
Aleksei (astynax)
"Проще читать" :)
Aleksei (astynax)
У линзооператоров есть неплохая мнемоника, так что это, наверное, плохой пример :)
Aleksei (astynax)
&&& похуже в этом плане, ибо поабстрактнее
доня.
&&& похуже в этом плане, ибо поабстрактнее
я вот понятия не имею что это если честно
Евгений
Так человеку хочется сумму без оборачивания в тип!
Чувак хочет юнион тайпы же, это что-то из области субтайпинга жеж
Aleksei (astynax)
Вон я в эльмолибе с комбинаторами за немением тайпклассов и сл-но с невозможностью использовать Monoid замучился имена придумывать для пятка мономорфных mappend
Aleksei (astynax)
Aleksei (astynax)
С абсолютно неговорящим названием :)
доня.
Это оператор из Control.Arrow
я уже захуглил (хех, забавное слово), да
доня.
вооооооооот
о чём я и говорю, без тайпклассов вообще уныло
кана
правда, juxt мне говорит даже меньше, чем &&&
Aleksei (astynax)
о чём я и говорю, без тайпклассов вообще уныло
я бы даже обменял возможность объявлять свои чисто-символьные операторы на тайпклассы!
Aleksei (astynax)
Инфиксную форму записи a `foo` b там уже убрали. Без операторов И без тайпклассов жизнь будет вообще унылой...
доня.
там это в элме?
кана
д
доня.
когда я последний раз на него смотрел там во всех примерах использовалась такая инфиксная запись..
доня.
ну шо, ещё пара лет, и из элма выпилят дженерики и haskell/ml-like синтаксис, и элм превратится в го
Aleksei (astynax)
Там принято returnMaybe |> Maybe.andThen foo |> Maybe.andThen bar
Aleksei (astynax)
В принципе это не натолько плохо. Но часто то, что выглядело бы сильно компактнее при хаскелевом синтаксисе, там выражается более громоздко. Зато единообразно
Зигохистоморфный
juxt для пары стрелок
Это вообще с кложуры оператор
Aleksei (astynax)
Юкстапозиция - вполне себе "неизкложурный" термин
доня.
Там принято returnMaybe |> Maybe.andThen foo |> Maybe.andThen bar
ну не то чтобы это плохо, но все равно не понимаю зачем выпиливать инфиксный вариант что-то похожее на хаскелевскую инфиксную запись же даже во всяких более-менее мейнстримных языках впиливают типа скалы или котлина (емнип) в руби вроде тоже что-то похожее то есть это даже не какая-то такая задротская фича хаскеля
Aleksei (astynax)
Они хотят "меньше синтаксиса". И любят пайпинг. Поэтому стремятся всё делать через него
Зигохистоморфный
Котлин достаточно годный
Aleksei (astynax)
Котлин достаточно годный
Он то тут причем? :) Или это наброс/попытка сменить тему? :)
доня.
Котлин достаточно годный
я как-то ни скалу ни котлин толком не пробовал, только простенькую аппу под андроид на котлине пробовал писать, но если бы мне нужно было выбрать язык под JVM, я бы наверное всё-таки выбрал скалу, там хкт, какие-то вроде даже зайчатки завтипов, в общем поинтереснее чем в котлине как мне кажется
Aleksei (astynax)
в пурсе ещё и foo `bar baz qux` doo писать можно и вот это мне не очень нравится