Size: a a a

2021 June 07

JS

Jerzy Syrowiecki in Haskell
генераторы в Питоне вообще в язык встроены, а в Хаскеле несколько библиотек

гринтреды в Хаскеле вообще в язык встроены, а в Питоне несколько библиотек
источник

O

Ortofax in Haskell
генераторы это list comprehension+ленивые списки?
источник

AF

Alexey Fedotov in Haskell
это императивщина такая, процедуры, в которые можно вернуться, не очень понятно, зачем они в хаскелле
источник

KV

Kirill Valyavin in Haskell
Действительно, зачем они в хаскелле, когда там уже есть списки, которые делают то же самое
источник

AF

Alexey Fedotov in Haskell
Списки не делают, генератор может менять последовательность в зависимости от внешнего состояния. Потоки, пожалуй, делают
источник

JS

Jerzy Syrowiecki in Haskell
генераторы-потоки-сопроцедуры — всё едино
источник

JS

Jerzy Syrowiecki in Haskell
(те потоки, которые не нити)
источник

DM

Dmitriy Mozhevitin in Haskell
Господа, копаюсь вот в Data.Constraint и увидел там занимательнный тип
newtype a :- b 

где  :k a :: Constraint и :k b :: Constraint
Судя по описанию, он представляет собой следование, то есть "имеем в скоупе констрейнт a, значит имеем констрейнт b"
и наличие объекта типа :- означает что мы имеем в скоупе констрейнт b

я не могу придумать другого случая следования кроме как
class (Eq a) => Ord a

И по идее по дефолту должно выполняться, что Ord a :- Eq a , зачем для пруфа этого факта нужен отдельный тип? Разве если у нас в скоупе есть Ord a, не значит ли это что есть Eq a?

помимо этого решил немного поиграться и ручками создать экземпляр :- для игрушечных тайпклассов
class A a where
class (A a) => B a where

instance A Int
instance B Int

proof :: B Int :- A Int
proof = ???

но понял что не совсем понимаю как его создать, ибо вид конструктора :-`меня смущает -- `Sub (a => Dict b) , а именно смущает наличие толстой стрелки внутри скобок
источник

IK

Ilya Kos in Haskell
proof = Sub Dict не работает?
источник

IK

Ilya Kos in Haskell
Тут про это рассказывают: https://www.youtube.com/watch?v=hIZxTQP1ifo
источник

IK

Ilya Kos in Haskell
Примерно с середины пойдет то, что ты хочешь услышать
источник

DM

Dmitriy Mozhevitin in Haskell
да, работает -__-
казалось бы до этого так писал, но линтер ругался (зря доверял видать)
источник

к

кана in Haskell
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}

data Dict a = a => Dict

newtype a :- b = Sub (a => Dict b)

class A a

class B b

instance A a => B a

a_imlpl_b :: A a :- B a
a_imlpl_b = Sub Dict


еще пример
источник

DM

Dmitriy Mozhevitin in Haskell
спасибо
как раз хотел заодно спросить какую-то информацию на эту тему попросить, но даже не знал как в принципе эту тему назвать — формальные док-ва на констрейнтах??
источник

к

кана in Haskell
можно такое использовать чтобы тайпчекером заранее проверять что твои инстансы покрывают какой-то случай, типа пишешь какой-то сложный набор инстансов и потом проверяешь

_ :: A :- B = Sub Dict
источник

a

adam in Haskell
constraint witnesses
источник

DM

Dmitriy Mozhevitin in Haskell
спасибо
источник

к

кана in Haskell
в целом a :- b и не нужен, можно просто опустить инстансы до первоклассных значений и использовать обычную стрелку
источник

к

кана in Haskell
a_impl_b' :: Dict (A a) -> Dict (B a)
a_impl_b' Dict = Dict
источник

DM

Dmitriy Mozhevitin in Haskell
справедливо
источник