Size: a a a

2020 November 07

Y

Yuuri in Haskell
В сигнатуре слева от => это точно класс, а справа точно тип. Импорта по имени у меня нет
источник

MK

Maxim Koltsov in Haskell
типы и классы в одном неймспейсы живут
источник

MK

Maxim Koltsov in Haskell
вроде как
источник

AA

A64m AL256m qn<co... in Haskell
Yuuri
В сигнатуре слева от => это точно класс, а справа точно тип. Импорта по имени у меня нет
речь-то про неймспейс
источник

Y

Yuuri in Haskell
Он ругается на "Ambiguous occurence" в сигнатуре, тогда как там оно точно unambiguous, мог бы и разрулить.
источник

Y

Yuuri in Haskell
Ну ладно. Как лучше поступить, переименовать тип во что-то уникальное и менее читабельное, или import Prelude hiding (Enum) в каждом месте?
источник

AA

A64m AL256m qn<co... in Haskell
Yuuri
Он ругается на "Ambiguous occurence" в сигнатуре, тогда как там оно точно unambiguous, мог бы и разрулить.
разрешения имен по типам в хаскеле почти нет
источник

Y

Yuuri in Haskell
А как он решает, Foo.bar это bar из модуля Foo или композиция с конструктором Foo? (это если без RecordDotSyntax ещё)
источник

AA

A64m AL256m qn<co... in Haskell
это разные неймспейсы а не выьор по типу же
источник
2020 November 08

JS

Jerzy Syrowiecki in Haskell
Yuuri
А как он решает, Foo.bar это bar из модуля Foo или композиция с конструктором Foo? (это если без RecordDotSyntax ещё)
по наличию пробела
источник

к

кана in Haskell
Yan Shkurinskiy
а есть хорошие линзы, которые построены на OverloadedLabels?
generic-lens очень хорошие, но нужно быть готовым к увеличению времени компиляции
источник

к

кана in Haskell
можно замутить свои generic-lens через generics-sop, тогда время компиляции будет быстрым, но зато перфоманс упадет
источник

к

кана in Haskell
Yuuri
Чому мой тип Enum клашится с Prelude-ным, там вроде только класс такой есть?
так классы и типы это значения одного уровня, типы у них разные просто

type MyEnum :: Type -> Constraint
type MyEnum = Enum
источник

к

кана in Haskell
Enum класс и Enum свой дата-тип клашатся по той же причине, почему клашатся

x :: Int
x = 1

x :: String
x = "1"

и точно так же как тут можно сделать полиморфное значение

class X a where
 x :: a
instance X Int where
 x = 1
instance X String where
 x = "1"


f :: String
f = show x <> x

так и с типами можно

data LocalEnum = A | B | C

class MyEnum c where
 type Enum' :: c
instance MyEnum (Type -> Constraint) where
 type Enum' = Enum
instance MyEnum Type where
 type Enum' = LocalEnum

f :: Enum' a => a -> Enum'
f _ = A
источник

к

кана in Haskell
не видел правда чтобы кто-нибудь так делал
источник

к

кана in Haskell
тут класс можно просто на семейство заменить конечно

type family Enum' :: k where
 Enum' = Enum
 Enum' = LocalEnum


или

type family Enum' :: k
type instance Enum' = Enum
type instance Enum' = LocalEnum
источник

к

кана in Haskell
тут еще одна интересная фича, что инстанс семейства выбирается не только по явным аргументам, но и неявным (k)
источник

Y

Yuuri in Haskell
кана
так классы и типы это значения одного уровня, типы у них разные просто

type MyEnum :: Type -> Constraint
type MyEnum = Enum
Вот теперь стало понятно, спасибо 👌
источник

YS

Yan Shkurinskiy in Haskell
кана
generic-lens очень хорошие, но нужно быть готовым к увеличению времени компиляции
Я думаю, можно же попробовать наиболее грамотно раскидать модули, чтобы обходилось максимально без перекомпиляции?
источник

AA

A64m AL256m qn<co... in Haskell
Yan Shkurinskiy
Я думаю, можно же попробовать наиболее грамотно раскидать модули, чтобы обходилось максимально без перекомпиляции?
они на месте использования генерируются
источник