Size: a a a

2021 June 05

O

Ortofax in Haskell
в хаскеле-то понятно нет
источник

JS

Jerzy Syrowiecki in Haskell
a -> Pattern a -> Bool
источник

O

Ortofax in Haskell
слишком просто
источник

O

Ortofax in Haskell
:)
источник

JS

Jerzy Syrowiecki in Haskell
в Хаскеле можно работать с объектами, кодирующими образцы, они только не интегрированы в язык
источник

JS

Jerzy Syrowiecki in Haskell
изучайте линзы, если хотите сложнее
источник

O

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

[

[BRM]White Rabbit in Haskell
Значит, надо сделать!
источник

AV

Andrey Vlasov in Haskell
Привет. Возможно ли сделать тайп алиас, к которому потом можно применять типы?
type Bool = forall m a. SimplyTyped m => m (a -> a -> a)
... :: Bool @m

Компиль на вот это пишет ошибку Cannot apply function of kind ‘*’ to visible kind argument ‘m’
источник

MK

Maxim Koltsov in Haskell
а type Bool m a = SimplyTyped m => ... не катит?
источник

AV

Andrey Vlasov in Haskell
Хочу с дефолтным "любым" агрументом)
источник

к

кана in Haskell
тут forall это аргумент не типа, а значения типа

x :: Bool
y = x @m @a
источник

к

кана in Haskell
а то что хочется это именно

type Bool m a = ...

потому что лямбд на типах еще не завезли, чтобы можно было писать

typ Bool = \m a -> ...

а что за дефолтный любой аргумент я не понял
источник

AV

Andrey Vlasov in Haskell
Bool ~ forall m a. C m => m a
Bool @m ~ forall a. C m => m a
Bool @m @a ~ C m => m a

Вот такой дефолтный (~ же это равенство типов в хаскелле, да?)
источник

AV

Andrey Vlasov in Haskell
Это понял, спасибо
источник

к

кана in Haskell
ну, можешь сделать функцию от списка наверное, ужасно будет выглядеть я думаю
источник

к

кана in Haskell
Bool '[] ~ forall m a. C m => m a
Bool '[m] ~ forall a. C m => m a
Bool [m, a] ~ C m => m a

не уверен что такое вообще выйдет сделать бтв в индуктивной форме, но с прямым перебором трех кейсов выйдет
источник

к

кана in Haskell
потому что это по сути вариадик функция получается
источник

AV

Andrey Vlasov in Haskell
type family Bool t
type instance Bool () = forall m a. ...
type instance Bool m = forall a. ...

Так?
источник

к

кана in Haskell
type X m a = C m => m a
type family Bool t where
 Bool '[] = forall m a. X m a
 Bool '[m] = forall a. X m a
 Bool [m, a] = X m a
источник