Size: a a a

2020 October 29

DB

Danil Berestov in Haskell
Ну то есть написать-то можно и по-старинке, без этих модностей ваших. Но что-то как-то)))
источник

DB

Danil Berestov in Haskell
Взял бы обычный async, vty и сё
источник

DB

Danil Berestov in Haskell
А вы на придумывали каво-то)
источник

KV

Kirill Valyavin in Haskell
Обычный vty это жуть, конечно, хоть бы brick что ли
источник

DB

Danil Berestov in Haskell
Что-то я с бриком не подружился. Как и в любом фреймворке влево-вправо и начинаешь приседать
источник

JS

Jerzy Syrowiecki in Haskell
Danil Berestov
Никто не знает никаких гайдов по построению архитектуры интерактивного приложения? Или только готовые сорцы остаётся читать?
MVC и его производные
источник

KV

Kirill Valyavin in Haskell
Danil Berestov
Что-то я с бриком не подружился. Как и в любом фреймворке влево-вправо и начинаешь приседать
Ну да, там эльм-подобная архитектура, поэтому такое. В рефлексе получше
источник

DB

Danil Berestov in Haskell
Kirill Valyavin
Ну да, там эльм-подобная архитектура, поэтому такое. В рефлексе получше
А ты чего писал на рефлексе, есть посмотреть?)
источник

KV

Kirill Valyavin in Haskell
Danil Berestov
А ты чего писал на рефлексе, есть посмотреть?)
Выше кинул example.hs. Я конечно его не писал, но добавил виджет коробки с заголовком))
источник

KV

Kirill Valyavin in Haskell
На нормальном рефлексе, который для веба, есть побольше кода, полноценное TodoMVC например
источник

ИБ

Игорь Белоусов... in Haskell
Alexander Vershilov
Кстати кто-то может объяснить приницип как с generic сделать общее правило, а для определённых полей другое?
Можно с помощью overlappable и отдельных тайпклассов что-то подобно реализовать, если я правильно вопрос понял =)
data TestData = TestData
{ f :: Int
, g :: Int
 , k :: String
 } deriving (Show, Generic)

class Test f where
 test :: f x

class FieldSpecial f where
 fieldS :: f x

class FieldCommon f where
 fieldC :: f x

instance Test f => Test (C1 c f) where
 test = M1 test

instance (Test f) => Test (D1 c f) where
 test = M1 test

instance (Test f, Test g) => Test (f :*: g) where
 test = test :*: test

instance FieldSpecial f => Test (S1 (MetaSel (Just "f") a b c) f) where
 test = M1 $ fieldS

instance {-# OVERLAPPABLE #-} (FieldCommon f, Selector c) =>
Test (S1 c f) where
 test = M1 $ fieldC

instance FieldSpecial (K1 R Int) where
 fieldS = K1 0

instance FieldCommon (K1 R Int) where
 fieldC = K1 1

instance FieldCommon (K1 R String) where
 fieldC = K1 "Test"

gtest :: forall a . (Generic a, Test (Rep a)) => a
gtest = to $ test
источник

DB

Danil Berestov in Haskell
Kirill Valyavin
Выше кинул example.hs. Я конечно его не писал, но добавил виджет коробки с заголовком))
Ну я просто о том, что _часто_ экзамплы не очень правдивы. Они очень ловко обходят проблемы фреймворков/либ
источник

JS

Jerzy Syrowiecki in Haskell
Danil Berestov
А ты чего писал на рефлексе, есть посмотреть?)
не я писал, но я поделюсь https://youtu.be/xB4tPs5plGU
источник

KV

Kirill Valyavin in Haskell
Danil Berestov
Ну я просто о том, что _часто_ экзамплы не очень правдивы. Они очень ловко обходят проблемы фреймворков/либ
Ну мне достаточного того, что ФРП строго круче TEA, потому что TEA легко выражается в терминах ФРП, а наоборот нифига. Раз на TEA как-то пишут, то на ФРП должно быть не хуже
источник

YS

Yan Shkurinskiy in Haskell
Игорь Белоусов
Можно с помощью overlappable и отдельных тайпклассов что-то подобно реализовать, если я правильно вопрос понял =)
data TestData = TestData
{ f :: Int
, g :: Int
 , k :: String
 } deriving (Show, Generic)

class Test f where
 test :: f x

class FieldSpecial f where
 fieldS :: f x

class FieldCommon f where
 fieldC :: f x

instance Test f => Test (C1 c f) where
 test = M1 test

instance (Test f) => Test (D1 c f) where
 test = M1 test

instance (Test f, Test g) => Test (f :*: g) where
 test = test :*: test

instance FieldSpecial f => Test (S1 (MetaSel (Just "f") a b c) f) where
 test = M1 $ fieldS

instance {-# OVERLAPPABLE #-} (FieldCommon f, Selector c) =>
Test (S1 c f) where
 test = M1 $ fieldC

instance FieldSpecial (K1 R Int) where
 fieldS = K1 0

instance FieldCommon (K1 R Int) where
 fieldC = K1 1

instance FieldCommon (K1 R String) where
 fieldC = K1 "Test"

gtest :: forall a . (Generic a, Test (Rep a)) => a
gtest = to $ test
там на перекрытии далеко не уедешь
источник

DB

Danil Berestov in Haskell
Норм, гляну
источник

YS

Yan Shkurinskiy in Haskell
"только на перекрытии"
источник

KV

Kirill Valyavin in Haskell
Danil Berestov
Ну я просто о том, что _часто_ экзамплы не очень правдивы. Они очень ловко обходят проблемы фреймворков/либ
Плюс, ФРП, по крайней мере рефлекс, неплохо расширяется за счёт того, что можно всегда сделать свой стрим и в него пихать что угодно через IO, т. е. если чего не хватает, то всегда можно доделать
источник

DB

Danil Berestov in Haskell
Смотрю вот и никак не могу понять сути Behaviour
источник

DB

Danil Berestov in Haskell
А не, кажись понял
источник