Size: a a a

2021 March 23

к

кана in Haskell
а понял, это что-то другое
источник

к

кана in Haskell
но не могу понять что
источник

ЗП

Зигохистоморфный Пре... in Haskell
там каинды
источник

ЗП

Зигохистоморфный Пре... in Haskell
type (~>) :: forall k. k -> k -> Type
type (~>) f g = Proxy f -> Proxy g -> Type
источник

Y

Yuuri in Haskell
кана
ого, это тоже круто
А есть ли компайл-тайм рефлексия, чтобы показать определение функции (хотя бы из того же модуля)? Последний раз, когда я пыталась это сделать через reify и showDef из TH, для тела функции было написано “At present, this value is always Nothing: returning the RHS has not yet been implemented because of lack of interest.”
источник

R

Roman in Haskell
Зигохистоморфный Препроморфизм
можно через явный forall как-то от Proxy избавиться?
type (~>) f g = Proxy f -> Proxy g -> Type
type (~>) f g = Type?

если у тебя уже есть f и g, то тебе не нужно их еще раз байндить через форалл
источник

R

Roman in Haskell
Roman
type (~>) f g = Type?

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

ЗП

Зигохистоморфный Пре... in Haskell
Roman
type (~>) f g = Type?

если у тебя уже есть f и g, то тебе не нужно их еще раз байндить через форалл
type family EvalNat (e :: f ~> g) (x :: f a) :: g a

data (<<<) :: (b ~> c) -> (a ~> b) -> (a ~> c)
type instance EvalNat (g <<< f) h = EvalNat g (EvalNat f h)

data (>>>) :: (a ~> b) -> (b ~> c) -> (a ~> c)
type instance EvalNat (g >>> f) h = EvalNat f (EvalNat g h)
источник

R

Roman in Haskell
Зигохистоморфный Препроморфизм
type family EvalNat (e :: f ~> g) (x :: f a) :: g a

data (<<<) :: (b ~> c) -> (a ~> b) -> (a ~> c)
type instance EvalNat (g <<< f) h = EvalNat g (EvalNat f h)

data (>>>) :: (a ~> b) -> (b ~> c) -> (a ~> c)
type instance EvalNat (g >>> f) h = EvalNat f (EvalNat g h)
просто data (f :: k) ~> (g :: k) не работает?
источник

ЗП

Зигохистоморфный Пре... in Haskell
Roman
просто data (f :: k) ~> (g :: k) не работает?
тут же как раз идея дефункционализации
источник

DG

Denis Gabidullin in Haskell
Прикольно, не думал, что так можно.
То есть Show не нужен?)

Надо посмотреть в исходники, что там происходит.
источник

DG

Denis Gabidullin in Haskell
кана
> data X = X
> data Y = Y X X
> Debug.RecoverRTTI.anythingToString (Y X X)
"Y X X"

> Debug.RecoverRTTI.anythingToString (1, \x -> x)
"(1,<Fun>)"
Жаль, что про "Fun" не особо много полезного выводится)
источник

DG

Denis Gabidullin in Haskell
🔥
источник

DG

Denis Gabidullin in Haskell
Видимо, не огонь(

Я по списку функций подумал, что reduce/reduction делают редукцию (шаг и все шаги) произвольного терма в Haskell.
А это нет так.
источник

JS

Jerzy Syrowiecki in Haskell
кана
> data X = X
> data Y = Y X X
> Debug.RecoverRTTI.anythingToString (Y X X)
"Y X X"

> Debug.RecoverRTTI.anythingToString (1, \x -> x)
"(1,<Fun>)"
наконец-то отладочная печать!
источник

K

Kir in Haskell
Колдовство!
источник

IO

I O in Haskell
Yuuri
А есть ли компайл-тайм рефлексия, чтобы показать определение функции (хотя бы из того же модуля)? Последний раз, когда я пыталась это сделать через reify и showDef из TH, для тела функции было написано “At present, this value is always Nothing: returning the RHS has not yet been implemented because of lack of interest.”
Я тут слегка подумал и сделал такое - https://github.com/aadaa-fgtaa/thgetdef. Достает core inlinable функций из других модулей. По сути бесполезно, кору в TH AST не встроить, так что только преттипринтить и можно
источник

IO

I O in Haskell
Если из того же модуля, можно теоретически читать файл с диска и парсить руками, но там опять вопрос в том, как это в TH AST парсить. Я когда-то что-то такое делал, но так и не доделал
источник
2021 March 24

[

[BRM]White Rabbit in Haskell
Я правильно понимаю, внутри IO-функций можно использовать чистые функции, а внутри чистых IO - нельзя?
источник

K

Kir in Haskell
[BRM]White Rabbit
Я правильно понимаю, внутри IO-функций можно использовать чистые функции, а внутри чистых IO - нельзя?
Да. Тайпчекер не позволит. Если только ты не возьмёшься за unsafePerformIO
источник