Андрей
так же и регулярки и тд и тп
кана
Text в твоем Path - не тип
Зигохистоморфный
Андрей
и если я сумирую типы, то эти конструкторы никуда не деваются, так?
Aleksei (astynax)
нельзя матчить по конструкторам разных типов. Только через суппу этих типов
кана
data Path = Text2 | Route2 - это РОВНО то же самое, что ты писал выше
Aleksei (astynax)
Андрей
я не могу сумировать чужие типы?
кана
можно, но нужна метка
Андрей
ахмлять
кана
почитай в вики про помеченую сумму множеств
Aleksei (astynax)
Either Text Regexp - сумма чужих типов
Aleksei (astynax)
Сумма чужих типов, это тип. Чтобы тип мог существовать в виде значения, у него должен быть конструктор
Андрей
кана
data Path = Text Text | Route Route
Text «123» :: Path - это значение Text с меткой Text, имеет тип Path
Aleksei (astynax)
Так человеку хочется сумму без оборачивания в тип!
Aleksei (astynax)
У нас в хаскеле такого нет
parket
кана
ух, мак еще и ковычки меняет, ужасно
Aleksei (astynax)
f :: Text | Regex -> foo у нас нельзя
кана
возможно, с flow пришел, там есть сумма множеств
кана
больше я такого нигде не видел)
parket
Ну, мы можем объявить тайпкласс. Но думаю выше предлагали
Aleksei (astynax)
Предлагали
Aleksei (astynax)
Даже семейки предлагали и прочие зависимости
parket
Что с тайпклассом не так? :) Оно и будет. Полиморфная функция.
Зигохистоморфный
Не тратьте на него время, просто пусть осознает изоморфизмы в множестве и если не тупой, то больше не задаст таких вопросов
parket
Получится. Через RankNTypes
Aleksei (astynax)
Ну меставми подхачить можно, канешн :)
Андрей
Андрей
хотя выглядит как "масло масленое"
Aleksei (astynax)
Конструкторы живут не в том неймспейсе, в котором живут типы, поэтому одно и то же имя у типа и у конструктора - это две большие разницы
Aleksei (astynax)
data Path
= Text Text
-- ^конструктор ^тип-параметр
Aleksei (astynax)
кана
первый 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)
> операторы в тайпклассах - плохо
иногда бывает сложно придумать имя, вот и городят "загогулины" :) Проблема нейминга же
доня.
Aleksei (astynax)
lensUpdateStatefullyWithFunctionIfItImplementsMonoid
Aleksei (astynax)
"Проще читать" :)
Aleksei (astynax)
У линзооператоров есть неплохая мнемоника, так что это, наверное, плохой пример :)
Aleksei (astynax)
&&& похуже в этом плане, ибо поабстрактнее
доня.
Aleksei (astynax)
Вон я в эльмолибе с комбинаторами за немением тайпклассов и сл-но с невозможностью использовать Monoid замучился имена придумывать для пятка мономорфных mappend
Aleksei (astynax)
Aleksei (astynax)
С абсолютно неговорящим названием :)
доня.
кана
доня.
вооооооооот
о чём я и говорю, без тайпклассов вообще уныло
кана
правда, juxt мне говорит даже меньше, чем &&&
Aleksei (astynax)
Инфиксную форму записи
a `foo` b
там уже убрали. Без операторов И без тайпклассов жизнь будет вообще унылой...
доня.
там это в элме?
кана
д
доня.
когда я последний раз на него смотрел там во всех примерах использовалась такая инфиксная запись..
доня.
ну шо, ещё пара лет, и из элма выпилят дженерики и haskell/ml-like синтаксис, и элм превратится в го
Aleksei (astynax)
Там принято
returnMaybe
|> Maybe.andThen foo
|> Maybe.andThen bar
Aleksei (astynax)
В принципе это не натолько плохо. Но часто то, что выглядело бы сильно компактнее при хаскелевом синтаксисе, там выражается более громоздко. Зато единообразно
Aleksei (astynax)
Юкстапозиция - вполне себе "неизкложурный" термин
доня.
Там принято
returnMaybe
|> Maybe.andThen foo
|> Maybe.andThen bar
ну не то чтобы это плохо, но все равно не понимаю зачем выпиливать инфиксный вариант
что-то похожее на хаскелевскую инфиксную запись же даже во всяких более-менее мейнстримных языках впиливают типа скалы или котлина (емнип)
в руби вроде тоже что-то похожее
то есть это даже не какая-то такая задротская фича хаскеля
Aleksei (astynax)
Они хотят "меньше синтаксиса". И любят пайпинг. Поэтому стремятся всё делать через него
Зигохистоморфный
Котлин достаточно годный
Aλexander
доня.
Котлин достаточно годный
я как-то ни скалу ни котлин толком не пробовал, только простенькую аппу под андроид на котлине пробовал писать, но если бы мне нужно было выбрать язык под JVM, я бы наверное всё-таки выбрал скалу, там хкт, какие-то вроде даже зайчатки завтипов, в общем поинтереснее чем в котлине как мне кажется
Aleksei (astynax)
в пурсе ещё и
foo `bar baz qux` doo
писать можно и вот это мне не очень нравится