@haskellru

Страница 1181 из 1551
Aleksey
11.05.2018
07:53:04
(или наоборот)

Александр
11.05.2018
07:53:42
Попробую прояснить. Императивный IoC, - это такой, для которого нечистый (IO) рантайм подменяется на время действия клиентской части. То есть, клиентские сценарии написаны в IO, и действуют непосредственно в нем. Иными словами, сценарии не отделены от IO-рантайма ничем, кроме, быть может, стека из других монад.

Aleksey
11.05.2018
07:54:19
в MTL стеке не обязан быть IO внизу

Александр
11.05.2018
07:55:30
в MTL стеке не обязан быть IO внизу
Это решает немного другие задачи

Google
Alister
11.05.2018
07:55:32
как щитаете

существует 10х девелопер?

A64m
11.05.2018
07:56:02
но IO же абстрактный если он имплементирован как АСТ, которое интерпретируется - это уже будет неимперативный IoC?

Александр
11.05.2018
07:56:02
Думаю, нет

существует 10х девелопер?
"Думаю, нет" ответ был сюда

Думаю, существуют 10x нубы ;)

Aleksey
11.05.2018
07:57:05
0.1x developers

Александр
11.05.2018
07:57:55
но IO же абстрактный если он имплементирован как АСТ, которое интерпретируется - это уже будет неимперативный IoC?
Это философский вопрос. Разграничение можно провести по возможности отлавливать эксцепшны

Aleksey
11.05.2018
07:59:24
Есть мнение, что 1x developer настолько же мифический, как и любой другой kx developer

Alexander
11.05.2018
07:59:32
в MTL стеке не обязан быть IO внизу
mtl стеке внизу не обязан быть IO, возможно имели вы ввиду

Aleksey
11.05.2018
07:59:59
да, слов порядок вышел хороший не слишком

kana
11.05.2018
08:00:26
final tagless это императивщина, так и запишем
ну так-то зига возможно бы сказал, что final tagless - терминальный интерпретатор в категории коалгебр, то есть ооп. Ну и в принципе был бы прав по моим суждениям

Google
Aleksey
11.05.2018
08:00:49
Вы упороты :)

И коупороты друг другу :P

Alexander
11.05.2018
08:01:36
блин уменя дилема

поидее нужно сделать типизированное GADT, но это так лень

Александр
11.05.2018
08:01:58
А является ли ООП с необходимостью императивщиной?

Alexander
11.05.2018
08:02:09
и усложнит часть кода, с другой стороны 100500 случаев рассматривать не надо

Alister
11.05.2018
08:02:35
стрелочка от кого к кому?

Александр
11.05.2018
08:03:04
что такое ООП?
Вот тут ты меня и подловил

Aleksey
11.05.2018
08:03:08
"Оголтело-отбитая парадигма"

Дед Пегас
11.05.2018
08:03:39
Операционное отделение психиатрии.

Или особое отделение психиатрии.

Александр
11.05.2018
08:04:07
Очень Относительное Понятие

A64m
11.05.2018
08:05:21
ООП == мутабельные ссылки

Index
11.05.2018
08:05:50
IORef это ООП теперь?

Aleksey
11.05.2018
08:06:02
OOPRef

IOOP

Ilya
11.05.2018
08:06:31
ООП это использование & вместо $

A64m
11.05.2018
08:06:35
Google
Александр
11.05.2018
08:06:50
IOOP
POOP

Aleksey
11.05.2018
08:07:23
А такая аббревиатура даже есть. Но во что раскрывается, я забыл...

Index
11.05.2018
08:07:40
Я бы сказал, что в первом приближении ООП это когда есть объекты, то есть группы методов, манипулирющих скрытым (инкапсулированным) состоянием. Типа data Object = Obj { doX :: IO (), doY :: A -> IO () } где doX и doY оперируют общим IORef

И иногда так делать очень даже удобно, так что особо гнать на ООП я бы не стал

Но как фундамент для языка это бесполезно, конечно, т.к. объектами далеко не каждую сущность полезно представить

Aleksey
11.05.2018
08:10:06
Как всегда "технология ок, но люди - тупые"

Евгений
11.05.2018
08:10:29
Всю жизнь думал, что ООП это структурная подтипизация

A64m
11.05.2018
08:10:44
> Как всегда "технология ок так никогда не бывает

Aleksey
11.05.2018
08:11:14
Технологии тоже плохие?

A64m
11.05.2018
08:11:20
Александр
11.05.2018
08:11:45
Технологии тоже плохие?
Технологии плохие в следствие того, что что люди глупые

A64m
11.05.2018
08:11:50
в одном языке, проще говоря

Aleksey
11.05.2018
08:14:13
POOP
https://www.acronymattic.com/Proper-Object-Oriented-Programming-(POOP).html

Александр
11.05.2018
08:15:05
Евгений
11.05.2018
08:15:08
Технологии тоже плохие?
Хорошие технологии закончились вместе с историей в 68'ом

Ilya
11.05.2018
08:15:23
Интересно, а в чате какого-нибудь C++ ведутся такие же упоротые разговоры о ФП? ? Типа - ФП это std::transform - Нет, ФП это attribute _((pure)) - Нет же лол, ФП это [](auto a, auto b) {return a*b;};

A64m
11.05.2018
08:16:06
да

Alexander
11.05.2018
08:16:47
Вы бы видели что в JS называют фп

Index
11.05.2018
08:16:52
в ФП чатах тоже решить что такое ФП не могут

A64m
11.05.2018
08:17:20
ладно, раз тут @int_index появился надо повторить вопрос

Google
A64m
11.05.2018
08:18:26
допустим, мы хотим выбирать тайпкласс в месте использования функции

Index
11.05.2018
08:19:18
интересное начало, а как мы его выбираем?

и до того как мы его выбрали, то как код пишется, если он не знает, из какого класса ему тёрмы доступны?

A64m
11.05.2018
08:21:55
мы выбираем указанием ньютайпа, для которого имплементирован тот инстанс, который нам нужен

после чего кастим функцию к тому типу, который нужен в месте использования

вопрос в том, как это сделать с минимальными аннотациями типов

Index
11.05.2018
08:24:49
если я правильно понял, то нам дано class Foo a where foo :: ... instance Foo A instance Foo B class Bar x where bar :: ... instance Bar X instance Bar Y и мы хотим Quux a, который дает метод quux, где quux = foo для A и B, и quux = bar для X и Y?

Leonid
11.05.2018
08:29:02
Вот да https://www.reddit.com/r/haskell/comments/8ilw75/there_are_too_many_prettyprinting_libraries/

A64m
11.05.2018
08:30:02
что мы точно можем: > foo :: Ord a => ([Down a] -> [Down a]) -> [a] -> [a]; foo = coerce > foo sort [1..10] [10,9,8,7,6,5,4,3,2,1] что хотелось бы получить > (sort @@ Down) [1..10] [10,9,8,7,6,5,4,3,2,1] вопрос в том, насколько мы можем продвинутся из пункта А в пункт Б

@int_index ^

Index
11.05.2018
08:31:58
Я не понял где тут "выбирать тайпкласс", работаем только с Ord

A64m
11.05.2018
08:32:10
инстанс

Index
11.05.2018
08:36:17
import Data.Coerce (@@) :: (Ord b, Coercible a b) => ([b] -> [b]) -> (a -> b) -> ([a] -> [a]) (@@) f _ = coerce f *Main Data.List Data.Ord> (sort @@ Down) [1,2,3] [3,2,1]

Вот так что ли?

A64m
11.05.2018
08:37:32
это должно работать не только для sort

тут есть два пути добавления большего числа аннотаций, как я понимаю 1) описывать "структуру" того, что мы кастим т.е. (sort @@ map Down) [1..10] 2) конкретные типы и семейства типов, которые конструируют "обернутый" тип (foo @Int @Down sort) [1..10::Int] что не весело совсем

Rustem
11.05.2018
08:42:36
Что делает >>= Можно примеры?

Andrew
11.05.2018
08:43:46
(>>=) :: m a -> (a -> m b) -> m b

Google
A64m
11.05.2018
08:45:16
Что делает >>= Можно примеры?
> (tail >>= flip zip) [1..5] [(1,2),(2,3),(3,4),(4,5)]

Leonid
11.05.2018
08:45:45
ну наконец-то начали ругать https://gist.github.com/chexxor/23ccf35add7dbdd33ecdd26888663140

Yuriy
11.05.2018
08:47:27
Что делает >>= Можно примеры?
лучше почитай «Learn you a Haskell»

A64m
11.05.2018
08:48:54
> [1..5] >>= (:[]) [1,2,3,4,5]

Index
11.05.2018
08:50:41
это должно работать не только для sort
Ну если уж McBride ничего лучше ala не придумал, то я и подавно

A64m
11.05.2018
08:51:52
Ну если уж McBride ничего лучше ala не придумал, то я и подавно
он все же эту задачу решал, когда многих нынешних средств не было

Denis
11.05.2018
08:52:37
A64m
11.05.2018
08:53:35
Ну если уж McBride ничего лучше ala не придумал, то я и подавно
ну и мой вопрос в основном, насколько хорошо теперь можно написать тайпсемейство, которое будет оборачивать указанный тип в указанный конструктор типа, и может быть можно как-то и не для конкретных типов такое сделать

или может для конкретных но с меньшими аннотациями в месте использования

Index
11.05.2018
08:58:28
Скорее такое type family Modify (a :: k1) (b :: k2) (f :: k3) :: k3 where Modify a b a = b Modify a b (f x) = (Modify a b f) (Modify a b x)

Но я не знаю как от аннотаций избавляться

Хм, оно еще не редьюсится почему-то

*Main Data.List Data.Ord> :kind! Modify Int (Down Int) ([Int] -> [Int]) Modify Int (Down Int) ([Int] -> [Int]) :: * = Modify Int (Down Int) (->) (Modify Int (Down Int) [] (Down Int)) (Modify Int (Down Int) [] (Down Int))

Я ожидал [Down Int] -> [Down Int] получить

Всё, разгадал

Третий кейс забыл

type family Modify (a :: k) (b :: k) (f :: kf) :: kf where Modify a b a = b Modify a b (f x) = (Modify a b f) (Modify a b x) Modify a b c = c

В общем оборачивает оно нормально

Страница 1181 из 1551