Size: a a a

2020 December 23

SB

S B in F# Chat
а вот эта игра со static member непонятно зачем нужна и какую проблему решает.
источник

I

IdiocyAcceptance in F# Chat
Ну я бы поспорил с "должно" выглядеть. Оно "может" выглядеть как ты указал. Тем более, что он делает аналог тайпклассов на SRTP, ему не нужно создавать каждый раз новые матрицы и прочее, у него просто есть костяк функций, которые требуют чтобы были такие-то такие-то мемберы, а остальное они сделают сами.
источник

I

IdiocyAcceptance in F# Chat
С другой стороны твой вариант не требует SRTP, он больше похож на аналог DI на самом деле. Прокидываешь нужные зависимости в матрицу и она там дальше крутится-вертится
источник

R

Roman in F# Chat
S B
это очень странное, нетипичное представление. в общем-то это должно выглядеть примерно так: type Matrix<'t> = Matrix of zero:'t * one:'t * plus:('t -> 't -'t), т.е. именованный кортеж.
эм, а как здесь разглядеть таблицу чисел? И где сами числа? Ну помимо нуля и единицы
источник

g

gsomix in F# Chat
IdiocyAcceptance
С другой стороны твой вариант не требует SRTP, он больше похож на аналог DI на самом деле. Прокидываешь нужные зависимости в матрицу и она там дальше крутится-вертится
Тайпклассы для бедных (явные, на словарях функций). Если они не инлайнятся, то будет очень неэффективно. ;)
источник

I

IdiocyAcceptance in F# Chat
gsomix
Тайпклассы для бедных (явные, на словарях функций). Если они не инлайнятся, то будет очень неэффективно. ;)
Ну я бы даже это тайпклассами не назвал, просто обычные зависимости
источник

I

IdiocyAcceptance in F# Chat
Сравнимо с Matrix<T>, в котором внутри условный IMatrixEnv<T>, где есть все эти мемберы и прочее
источник

g

gsomix in F# Chat
IdiocyAcceptance
Ну я бы даже это тайпклассами не назвал, просто обычные зависимости
Это способ обеспечить ad-hoc полиморфизм. В языках с тайпклассами подстановкой "зависимостей" занимается компилятор.
источник

g

gsomix in F# Chat
Но можно это делать руками.
источник

g

gsomix in F# Chat
Примеры от qsort [1] в стандартной библиотеке C до type-indexed values [2] в OCaml.

[1] https://en.wikipedia.org/wiki/Qsort
[2] https://blog.janestreet.com/a-working-programmers-guide-to-type-indexed-values/
источник

g

gsomix in F# Chat
@AnutaU шарит, она делала доклад про виды полиморфизмов!
источник

АУ

Анна Удовиченко... in F# Chat
gsomix
@AnutaU шарит, она делала доклад про виды полиморфизмов!
ой, давно это было 🙈
источник

SB

S B in F# Chat
Roman
эм, а как здесь разглядеть таблицу чисел? И где сами числа? Ну помимо нуля и единицы
Ну добавить надо ещё функции.
источник

SB

S B in F# Chat
IdiocyAcceptance
С другой стороны твой вариант не требует SRTP, он больше похож на аналог DI на самом деле. Прокидываешь нужные зависимости в матрицу и она там дальше крутится-вертится
Конечно нет. Тайпклассы Хасклея - это в первую очередь способ заочно общаться, можешь открыть любой более-менее общеупотребимый тайплкасс из Prelude и убедиться воочию: там не только законы, которые должны выполнять имплеметоры тайпкласс (и на исполнение которых полагается компилятор нередко), но и комментарии тоже встречаются. Там сама дефиниция тайпкласс явно отделена от всего остального, хорошо акцентирует на себе внимание и в целом отлично справляется с возложенной на нее социальной миссией. А за годы, конечно, еще обрасла другими удобствами (например, дефолтной реализацией). Здесь же - хуй пойми что.
источник

g

gsomix in F# Chat
S B
Конечно нет. Тайпклассы Хасклея - это в первую очередь способ заочно общаться, можешь открыть любой более-менее общеупотребимый тайплкасс из Prelude и убедиться воочию: там не только законы, которые должны выполнять имплеметоры тайпкласс (и на исполнение которых полагается компилятор нередко), но и комментарии тоже встречаются. Там сама дефиниция тайпкласс явно отделена от всего остального, хорошо акцентирует на себе внимание и в целом отлично справляется с возложенной на нее социальной миссией. А за годы, конечно, еще обрасла другими удобствами (например, дефолтной реализацией). Здесь же - хуй пойми что.
Это от того, что в F# нельзя пачку ограничений оформить под одним именем.
источник

g

gsomix in F# Chat
Но на эту тему было предложение!
источник

I

IdiocyAcceptance in F# Chat
gsomix
Это от того, что в F# нельзя пачку ограничений оформить под одним именем.
да, я попытался сделать как челик выше, только немного иначе и всё сломалось. Мог бы в целом и вывести ограничения сам
источник

SB

S B in F# Chat
А с точки зрения инжиниринга, тайпкласс АЖ НИЧЕМ не отличается от обычного итерфейса, а местами даже ограничителен. Например, полных порядков на натуральных числах бесконечного много, но instance Ordered в Хаскле может быть только один без дополнительных танцев.
источник

I

IdiocyAcceptance in F# Chat
IdiocyAcceptance
да, я попытался сделать как челик выше, только немного иначе и всё сломалось. Мог бы в целом и вывести ограничения сам
Это норм работает для инлайн функций, плохо для типов
источник

SB

S B in F# Chat
gsomix
Это от того, что в F# нельзя пачку ограничений оформить под одним именем.
И еще иерархию зависимостей. Например, Группа - это моноид с реверсией 't -> 't, подчиняющейся определенному закону по отношению к id.
источник