
Misha
18.09.2017
12:56:42
а чо, как будто что-то плохое
я вот очень хочу data внутри функций

illiatshurotshka❄️
18.09.2017
12:58:13
и во что оно будет превращаться?

Yuriy
18.09.2017
12:58:37
да, в Скале это плохое. так можно легко обратиться к неинициализированной переменной

Google

Ilya
18.09.2017
12:58:52
а вот кстати, по-моему в идрисе над do-нотацией как-то поиздевались^W улучшили?
расскажите, кто в курсе
че там

Vasiliy
18.09.2017
13:00:52
можно сказать, там по-дефолту включён RebindableSyntax

kana
18.09.2017
13:01:02
Тож интересно. Знаю, что можно как-то самому определять поведение + всякие something x in y работают с до как лет
do
let x = 1
rewrite z
..

Alexander
18.09.2017
13:02:24
@Masteroid можно определить (») для своего типа

Ilya
18.09.2017
13:03:31

Rinat
18.09.2017
13:03:32

Alexander
18.09.2017
13:04:14
ну можно для всякой дурости типа моноид через do:
do "aa"
"bb"
"aa,bb"
я думаю @voidlizard бы обрадовался, ему я помню приходилось часто делать monad только ради того, чтобы do-notation был, например в emut-fat
плюс для отладки можно использовать, можно пример в ditrsibuted-process-test посмотреть, там автоматом лог событий пишется

Aleksey
18.09.2017
13:05:42
Э... ApplicativeDo же, не?

Alexander
18.09.2017
13:07:04
когда-то его не было

Google

Alexander
18.09.2017
13:07:33
тем более если у тебя например Monoid, то MonoidDo уже нет

Aleksey
18.09.2017
13:08:08
У моноида же ассоциативность, do низзя

Alexander
18.09.2017
13:08:38
а. не было когда писалось ни того ни другого б. не решает проблему
почему нельзя?
(a • b) • c = a • (b • c) вперёд и с песней, если тебе только >> надо

Aleksey
18.09.2017
13:09:37
Да, точно

Alexander
18.09.2017
13:09:39
если нужен bind понятно, что тебе Monad надо

Aleksey
18.09.2017
13:09:46
Но бинда то нет!

Alexander
18.09.2017
13:09:50
ага

Aleksey
18.09.2017
13:10:59
Да и смысл выражения
do "aaa"
"bbb"
выглядит странно, т.к. тут ничего не "делается" (do)
Даже в парсерах c FromString do-блоки странно выглядят, ИМХО

Alexander
18.09.2017
13:12:28
ну например ты можешь так дерево собирать
do leaf ...
branch $ do ...
leaf ...
чтобы не писать fromList или mconcat
оно человечнее выглядит.
но пока самый реальный кейс я видел в network-transport/distributed-process
но сходу найти не могу

Aleksey
18.09.2017
13:13:39
do в первую очередь бинды сахарит, а не >>

Alexander
18.09.2017
13:13:44
угу

Google

Aleksey
18.09.2017
13:14:15
А если нет биндов, то do не нужен
do намекает на порядок вычисления, и привносить этот конкретный смысл туда, где он не нужен, странно
blaze-html доже в do-нотации дерево тэгов записывает. Это меня лично всегда раздражало

Arseniy
18.09.2017
13:17:41
Писали уже про RebindableSyntax?

Alexander
18.09.2017
13:20:47
нет, не писали, думали что все знают

Arseniy
18.09.2017
13:21:26
Оказывается, что это не очень известная вещь. Даже Oxij не знал ее, рассказал ему об этом месяц назад.

kana
18.09.2017
13:22:30

illiatshurotshka❄️
18.09.2017
14:04:52
а какой существующий язык программирования соответствует λPω̲ ?
из лямбда куба

Alex
18.09.2017
14:05:41
LF может

illiatshurotshka❄️
18.09.2017
14:05:54
как расшифровывается?

Alex
18.09.2017
14:06:45
http://twelf.org/wiki/Main_Page
не уверен есть ли там type operators, но завтипы есть, а полиморфизма нет
а расшифровывается как Logical Framework

Vyacheslav
18.09.2017
14:08:40
А полиморфизм это разве не частный случай завтипов?

Евгений
18.09.2017
14:08:44

illiatshurotshka❄️
18.09.2017
14:09:01
а type operators это типо data в хаскеле?

Alex
18.09.2017
14:09:23
хз я не знаю хаскеля :D

Vyacheslav
18.09.2017
14:09:46
Ну в хаскелле есть type operators

Евгений
18.09.2017
14:09:57
type operators это возможность построить типы хитрых сортов * -> *

Google

Vyacheslav
18.09.2017
14:10:13
Типа как type families, только операторы

illiatshurotshka❄️
18.09.2017
14:11:46
ого

Alex
18.09.2017
14:14:14

Vyacheslav
18.09.2017
14:58:17
то есть зав типы но не по типу Type

Bohdan
18.09.2017
15:12:25
Чем можно дампнуть любое выражение независимо от типа? Чтобы передать trace или print — надо знать, что внутри, а я для этого и хочу вывести, чтоб узнать

Ilya
18.09.2017
15:15:25
ты имеешь в виду, что может не быть Show?

Bohdan
18.09.2017
15:16:04

Ilya
18.09.2017
15:24:54
Не очень понятно, что там у тебя
Покажи код и ошибку

kana
18.09.2017
15:26:01

Евгений
18.09.2017
15:28:23

Ilya
18.09.2017
15:28:36
мне кажется, что он хочет не это
скорее всего какой-то полиморфизм типа
main = do
x <- readLn
print x
и ему жалуются, что неизвестен тип

Bohdan
18.09.2017
15:35:37
http://paste.debian.net/986657/
taporwave.hs:63:5: error:
• No instance for (Show Options) arising from a use of ‘print’

Vasiliy
18.09.2017
15:38:01
ну и допиши ему deriving (Show)

Bohdan
18.09.2017
15:47:12

Vyacheslav
18.09.2017
20:38:57
а я могу как-то через forall сделать констрейнт на kind?

kana
18.09.2017
20:40:21
Констрейнт именно или просто полиморфизм?

Ilya
18.09.2017
20:40:23
Я думал, в hs по умолчанию констрейнт на кайнд *

Google

Ilya
18.09.2017
20:40:52
Для всех типовых переменных

kana
18.09.2017
20:41:32
Ну таки нет, не все типовые переменные имеют кайнд *, Comopose (f :: * -> *) (g :: * -> *)

Vyacheslav
18.09.2017
20:41:33
констрейнт

Denis
18.09.2017
20:42:59

kana
18.09.2017
20:43:02
Ну так тупо укажи его?

Denis
18.09.2017
20:43:50
ConstraintKinds

Vyacheslav
18.09.2017
20:44:48
я смотрел на него, но так и не понял как заюзать
вот например у меня есть функция
fn :: Value -> Result a
как мне сделать constraint на a, что она должна быть какого-то кайнда

Alexander
18.09.2017
20:53:44
@termina1 :
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE PolyKinds #-}
data Result (a :: k)
data Value
fn :: Value -> Result (a :: * -> *)
fn = undefined
если хочется (a :: Value) то DataKinds
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE DataKinds #-}
data Result (a :: k)
data Value
fn :: Value -> Result (a :: Value)
fn = undefined

Vyacheslav
18.09.2017
21:47:08
нифига все равно не получается
я чего-то не понимаю
вот пример
singletons [d|
data AIIntent = IntentTask | IntentChart
|]
instance FromJSON (SAIIntent (b :: AIIntent)) where
parseJSON (String "create_task") = return SIntentTask
parseJSON (String "send_task") = return SIntentChart
parseJSON _ = fail "Unknown action"
почему он тут мне выдает ошибку про rigid variable?

Alexander
18.09.2017
22:01:46
ох синглетоны