Size: a a a

2021 March 02

к

кана in Haskell
у функций Num a ограничение
источник

AP

Artem Pelenitsyn in Haskell
[BRM]White Rabbit
Зачем мне кортеж из строки и були под именем "точка"?
Но в целом, я понимаю ваше желание: оно типично для людей пришедших из ООП особенно. Но тайп классы так не используются.
источник

[

[BRM]White Rabbit in Haskell
кана
так он тоже не вйыдет
В функции getX - выйдет
источник

к

кана in Haskell
ну добавить туда тоже Num
источник

к

кана in Haskell
его все равно в функции нужно добавлять, потому что Num a => (a, a) тип это не кортеж, где a могут быть только нумами, это функция из инстанса в кортеж
источник

к

кана in Haskell
=> можно спокойно в голове заменять на ->, и считать что то что слева от => просто подставляется неявно (так оно и есть)
источник

[

[BRM]White Rabbit in Haskell
Artem Pelenitsyn
Но в целом, я понимаю ваше желание: оно типично для людей пришедших из ООП особенно. Но тайп классы так не используются.
Знаю один хак с юзингами из плюсов для написания фреймворков с возможной подменой типов, но мне кажется, что в хаскеле он неприменим
источник

[

[BRM]White Rabbit in Haskell
using Cv::String = std::string;
Если хочется изменить внутреннюю реализацию стринги, создавай класс Cv::String, копируй внешнее апи стд-стринги и пиши внутри что хочешь. А остальной код вообще можно не трогать.
источник

AP

Artem Pelenitsyn in Haskell
[BRM]White Rabbit
using Cv::String = std::string;
Если хочется изменить внутреннюю реализацию стринги, создавай класс Cv::String, копируй внешнее апи стд-стринги и пиши внутри что хочешь. А остальной код вообще можно не трогать.
type тоже так можно использовать, но тайп классы тут не при чем.
источник

к

кана in Haskell
если хочется тип, в котором гарантированно могут быть только нумы, то вот он

data Point a = Num a => Point a a
-- или
data Point a where
 Point :: Num a => a -> a -> Point a

s :: Point a -> a
s (Point a b) = a + b

тут при создании значения типа Point требуется, чтобы инстанс Num был в контексте

а при матчинге Point этот инстанс из конструктора достается
источник

[

[BRM]White Rabbit in Haskell
Первый вариант ихмо читабельнее
источник

к

кана in Haskell
тут нужен именно data, а не type/newtype, потому что там лежит не одно значение. Это что-то вроде

type Point a = (Num a, a, a)
data Point a = Point {Num a} a a

то есть в конструктор запихивается еще одно неявное поле с инстансом Num a
источник

[

[BRM]White Rabbit in Haskell
понял, дойду и до даты потом
источник

[

[BRM]White Rabbit in Haskell
Хм, а мейби можно так описывать?
источник

к

кана in Haskell
это и есть Maybe с точностью то переименования
источник

к

кана in Haskell
data Maybe a = Just a | Nothing
источник

к

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

[

[BRM]White Rabbit in Haskell
Понял, принял. Воспринимать data как растовые енумы оказалось довольно просто для понимания. Хотя судя по всему, там дальше пойдёт сложная хаскельная магия
источник

K

Kir in Haskell
[BRM]White Rabbit
Понял, принял. Воспринимать data как растовые енумы оказалось довольно просто для понимания. Хотя судя по всему, там дальше пойдёт сложная хаскельная магия
Нет там никакой хаскелльно магии
источник

JS

Jerzy Syrowiecki in Haskell
да, в Расте больше магии для енумов
источник