Alexander
тем более если у тебя например Monoid, то MonoidDo уже нет
Aleksei (astynax)
когда-то его не было
Вроде бы он довольно давно есть, только раньше он был в виде ado
Aleksei (astynax)
У моноида же ассоциативность, do низзя
Alexander
а. не было когда писалось ни того ни другого б. не решает проблему
Alexander
почему нельзя?
Alexander
(a • b) • c = a • (b • c) вперёд и с песней, если тебе только >> надо
Aleksei (astynax)
Да, точно
Alexander
если нужен bind понятно, что тебе Monad надо
Aleksei (astynax)
Но бинда то нет!
Alexander
ага
Aleksei (astynax)
Да и смысл выражения
do "aaa"
"bbb"
выглядит странно, т.к. тут ничего не "делается" (do)
Aleksei (astynax)
Даже в парсерах c FromString do-блоки странно выглядят, ИМХО
Alexander
ну например ты можешь так дерево собирать
Alexander
do leaf ...
branch $ do ...
leaf ...
Alexander
чтобы не писать fromList или mconcat
Alexander
оно человечнее выглядит.
Alexander
но пока самый реальный кейс я видел в network-transport/distributed-process
Alexander
но сходу найти не могу
Aleksei (astynax)
do в первую очередь бинды сахарит, а не >>
Alexander
угу
Aleksei (astynax)
А если нет биндов, то do не нужен
Aleksei (astynax)
do намекает на порядок вычисления, и привносить этот конкретный смысл туда, где он не нужен, странно
Aleksei (astynax)
blaze-html доже в do-нотации дерево тэгов записывает. Это меня лично всегда раздражало
Arseniy
Писали уже про RebindableSyntax?
Alexander
нет, не писали, думали что все знают
Arseniy
Оказывается, что это не очень известная вещь. Даже Oxij не знал ее, рассказал ему об этом месяц назад.
кана
Anonymous
а какой существующий язык программирования соответствует λPω̲ ?
Anonymous
из лямбда куба
Alex
LF может
Anonymous
как расшифровывается?
Alex
http://twelf.org/wiki/Main_Page
Alex
не уверен есть ли там type operators, но завтипы есть, а полиморфизма нет
Alex
а расшифровывается как Logical Framework
Viacheslav
А полиморфизм это разве не частный случай завтипов?
Евгений
Anonymous
а type operators это типо data в хаскеле?
Alex
хз я не знаю хаскеля :D
Viacheslav
Ну в хаскелле есть type operators
Евгений
type operators это возможность построить типы хитрых сортов * -> *
Viacheslav
Типа как type families, только операторы
Anonymous
ого
Alex
Viacheslav
то есть зав типы но не по типу Type
Bohdan
Чем можно дампнуть любое выражение независимо от типа? Чтобы передать trace или print — надо знать, что внутри, а я для этого и хочу вывести, чтоб узнать
Ilya
ты имеешь в виду, что может не быть Show?
Ilya
Не очень понятно, что там у тебя
Ilya
Покажи код и ошибку
кана
Ilya
мне кажется, что он хочет не это
Ilya
скорее всего какой-то полиморфизм типа
main = do
x <- readLn
print x
Ilya
и ему жалуются, что неизвестен тип
Bohdan
http://paste.debian.net/986657/
taporwave.hs:63:5: error:
• No instance for (Show Options) arising from a use of ‘print’
Vasiliy
ну и допиши ему deriving (Show)
Bohdan
Viacheslav
а я могу как-то через forall сделать констрейнт на kind?
кана
Констрейнт именно или просто полиморфизм?
Ilya
Я думал, в hs по умолчанию констрейнт на кайнд *
Ilya
Для всех типовых переменных
кана
Ну таки нет, не все типовые переменные имеют кайнд *, Comopose (f :: * -> *) (g :: * -> *)
Viacheslav
констрейнт
Зигохистоморфный
кана
Ну так тупо укажи его?
Зигохистоморфный
ConstraintKinds
Viacheslav
я смотрел на него, но так и не понял как заюзать
Viacheslav
вот например у меня есть функция
Viacheslav
fn :: Value -> Result a
Viacheslav
как мне сделать constraint на a, что она должна быть какого-то кайнда
Alexander
@termina1 :
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE PolyKinds #-}
data Result (a :: k)
data Value
fn :: Value -> Result (a :: * -> *)
fn = undefined
Alexander
если хочется (a :: Value) то DataKinds
Alexander
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE DataKinds #-}
data Result (a :: k)
data Value
fn :: Value -> Result (a :: Value)
fn = undefined
Viacheslav
нифига все равно не получается
Viacheslav
я чего-то не понимаю
Viacheslav
вот пример
Viacheslav
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"
Viacheslav
почему он тут мне выдает ошибку про rigid variable?
Alexander
ох синглетоны