by

Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Nov 23 2019 14:39
    cblp closed #92
  • Nov 23 2019 14:39
    cblp commented #92
  • Nov 23 2019 14:39
    cblp commented #109
  • Nov 23 2019 14:38

    cblp on gh-pages

    Update link (#109) https://has… (compare)

  • Nov 23 2019 14:37

    cblp on qnikst-patch-1

    (compare)

  • Nov 23 2019 14:37

    cblp on master

    Update link (#109) https://has… (compare)

  • Nov 23 2019 14:37
    cblp closed #109
  • Nov 22 2019 20:25
    qnikst review_requested #109
  • Nov 22 2019 20:25
    qnikst opened #109
  • Nov 22 2019 20:24

    qnikst on qnikst-patch-1

    Update link https://haskell-la… (compare)

  • Nov 18 2019 08:43
    cblp commented #92
  • Nov 17 2019 09:57
    qnikst commented #92
  • Nov 10 2019 09:01

    cblp on gh-pages

    Add The Haskell Phrasebook (compare)

  • Nov 10 2019 09:01

    cblp on master

    Add The Haskell Phrasebook (compare)

  • Oct 31 2019 16:10
    cblp edited #106
  • Oct 31 2019 16:10
    cblp commented #106
  • Oct 31 2019 16:08

    cblp on master

    Add some text from #106 (compare)

  • Oct 30 2019 10:33

    cblp on master

    Add draft of `effects-haskell` … (compare)

  • Oct 30 2019 10:13

    cblp on gh-pages

    Add `sic` to `хаскелит` (compare)

  • Oct 30 2019 10:12

    cblp on master

    Add `sic` to `хаскелит` (compare)

Alexander Tchitchigin
@gabriel-fallen
Ord требует, а значит и "автоматически" предоставляет в распоряжение Eq. Но не в обратную сторону. Поэтому такое направление стрелки в PureScript.
Yuriy Syrovetskiy
@cblp

в логике (=>) означает импликацию, то есть мы пишем A => B, когда A не может быть без B. например, Ord не может быть без Eq. в PureScript так.

а в Хаскеле исторически сложилось наоборот, и (=>) означает как бы тоже импликацию, но более сложную: "Если у меня будет Eq, то я смогу дать Ord".

и оба варианта по-своему логичные
Gleb Popov
@arrowd
Кто знает где разработчики кабала общаются? Рассылка cabal-devel пустая.
Yuriy Syrovetskiy
@cblp
не уверен, что этот ответ правильный, но на https://www.haskell.org/cabal/ написано "Questions can be sent to the Haskell libraries mailing list" https://mail.haskell.org/mailman/listinfo/libraries
Gleb Popov
@arrowd
Эти люди где-то должны же обсуждать даты релизов. Я нигде не нашел.
Gleb Popov
@arrowd

Отцы, тут вот статья про singletons для самых маленьких: https://blog.jle.im/entry/introduction-to-singletons-1.html
Там running example вида

data DoorState = Opened | Closed | Locked
  deriving (Show, Eq)

data Door (s :: DoorState) = UnsafeMkDoor { doorMaterial :: String }

и они реализуют

lockDoor :: Door 'Closed -> Door 'Locked
openDoor :: Door 'Closed -> Door 'Opened

А можно ли состояние двери как-то в монаде State хранить, чтобы lockDoor стал вида State (Door s) a? Ведь тогда получается тип стейта меняться будет?

Gleb Popov
@arrowd
А, ну вообще я чет глупость спросил, наверное.
В типе же должно отражаться исходное состояние и конечное. А в типе этого стейта его некуда присунуть.
Yuriy Syrovetskiy
@cblp
в этот State не засунуть, но можно другой определить data StateFromTo from to a = StateFromTo (from -> (to, a))
а вот класс Monad действительно требует, чтобы тип сохранялся, поэтому Monad надо заменить на что-то другое
кажется, IxMonad для этого надо использовать
Gleb Popov
@arrowd

Отцы, возвращаясь к этим синглтонам из https://blog.jle.im/entry/introduction-to-singletons-1.html

Понять я все понял, но не представляю как бы я сам это в жизни применил. Могу только по полной аналогии статье:

  • Есть ли phantom types?
  • Есть ли функции вида PhantomType a -> PhantomType b?
  • Юзаем синглтоны!

А помимо этого?

Alexander Tchitchigin
@gabriel-fallen
Singletons - это же poor man's dependent types. Используются соответственно, типа https://github.com/typeable/schematic
Dmitry Olshansky
@odr
Можно в тип засунуть (promote) разную информацию, известную при компиляции, например, структуру БД, структуру xml, описание веб-формы и т.п. Эту информацию можно использовать как в compile-time на уровне типов - для проверки всяких констрейнтов и написания обобщенных функций, и в runtime - вытащив из типа соответствующее значение (demote).
Alexander Babin
@mudriyjo

Всем привет не могу понять почему стандартный list fold пытается взять тип [[char]] и не использует тип [text]

abbreviate :: Text -> Text
abbreviate xs = T.toUpper text
    where text = foldl (\acc x -> T.snoc acc (head x)) T.empty res
          text :: Text
          res = T.split (\x -> x == ' ' || x == '-') xs
          res :: [Text]

выдает ошибку

Couldn't match type ‘Text’ with [Char]’
      Expected type: [[Char]]
        Actual type: [Text]
    • In the third argument of ‘foldl’, namely ‘res’
      In the expression:
        foldl (\ acc x -> T.snoc acc (head x)) T.empty res
      In an equation for ‘text’:
          text = foldl (\ acc x -> T.snoc acc (head x)) T.empty res
  |
8 |     where text = foldl (\acc x -> T.snoc acc (head x)) T.empty res
Yuriy Syrovetskiy
@cblp
foldl здесь ни при чём, вы списковый head применяете для получения Char, поэтому ожидается x :: [Char]
и не такой уж он стандартный
Yuriy Syrovetskiy
@cblp
вы, можете использовать Text.head, но это опасно, потому что она бросает исключение на пустой строке, а Text.split действительно выдаёт пустые строки
поэтому лучше взять Text.uncons
Alexander Babin
@mudriyjo
@cblp thanks
Gleb Popov
@arrowd
Нынче репа актуальна?
Yuriy Syrovetskiy
@cblp
по слухам, да
klapaucius
@klapaucius
Репа вроде уже достаточно сгнила чтоб было как то неудобно ее рекомендовать, но массив еще недостаточно доделан, чтоб можно было его уверенно рекомендовать
Alexander Tchitchigin
@gabriel-fallen
Оказалось, "массив" - это Data.Massiv...
А что там ещё недостаточно доделано?
klapaucius
@klapaucius
@gabriel-fallen да просто этой библиотекой пока не пользуется примерно никто, даже сам автор для своей либы для работы с изображениями, так что как-то нет уверенности, что готово для продакшона
Alexander Tchitchigin
@gabriel-fallen
@klapaucius а он свой Massiv написал не от фрустрации ли использования Repa для этой своей либы для работы с изображениями?
klapaucius
@klapaucius
От нее, конечно, тем не менее, переписывание на массив пока не закончено
Gleb Popov
@arrowd
Кто-нибудь пользовался пакетом graphviz? Недоумеваюсь как из распарсенного дота сделать граф fgl.
Yuriy Syrovetskiy
@cblp
разобрать DotGraph и собрать что нужно, видимо
Alexander Tchitchigin
@gabriel-fallen
А fgl всё ещё актуальна? Мы использовали на позапрошлом (помнится) ICFPC - я не был впечатлён ни функциональностью, ни произволительностью. Ничего лучше всё равно нет?
Yuriy Syrovetskiy
@cblp

dotToGraph :: (DotRepr dg Node, Graph gr) => dg Node -> gr Attributes Attributes

A pseudo-inverse to graphToDot; "pseudo" in the sense that the original node and edge labels aren't able to be reconstructed.

@gabriel-fallen, смотрел на algebraic-graphs?
Alexander Tchitchigin
@gabriel-fallen
@cblp нет, пристально ни на что не смотрел. Но видно, что в containers тоже есть что-то про графы.
Bombin Valentin
@wwall
Всем привет. Вопрос - возможно ли как-то при вызове stack new указать сразу использование alex и happy?
Alexander Tchitchigin
@gabriel-fallen
Но Alex и Happy там не видать.
Yuriy Syrovetskiy
@cblp
@wwall, а куда вы их вызывать собираетесь?
они должны сами вызываться для каждого .x и .y модуля, перечисленных в кабалфайле
Gleb Popov
@arrowd
@cblp Дык у fgl'ского графа инстанса DotRepr нет.
Yuriy Syrovetskiy
@cblp
@arrowd, разве dotToGraph его требует?
Gleb Popov
@arrowd
А, действительно, неправильно прочитал.
Спасибо.
Gleb Popov
@arrowd
Я чет так и не осилил извлечение подграфа по метке узла с помощью graphviz.
Yuriy Syrovetskiy
@cblp
на чём застрял?
Gleb Popov
@arrowd

Сначала я его распарсил в DotGraph a из http://hackage.haskell.org/package/graphviz-2999.20.0.3/docs/Data-GraphViz-Types-Graph.html

Распарсить таким образом, чтобы в a был лейбл я не смог, поэтому пришлось написать функцию, которая проходит по всему графу и матчит ноду с нужными атрибутами. У найденной ноды дернул successors, а это оказались только непосредственные последователи. Т.е. тут тоже чет рекурсивное надо было изобретать, поэтому я забил.
Потом через fgl пробовал, но там оказалось что при восстановлении назад из fgl в дот он какую-то информацию теряет. Не помню уже что именно. Я расстроился и пошел пить.

Gleb Popov
@arrowd
А есть парсер XML а-ля Aeson.TH? Чтобы я ему дататайп, а он сам парсер придумал.
Alexander Tchitchigin
@gabriel-fallen
Я знаю про https://github.com/typeable/xml-isogen но он немного наоборот работает...
nickbeljaev
@nickbeljaev
"Неизлечимая" утечка памяти в простой функции