Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Apr 06 07:30

    cblp on gh-pages

    Split sum and product (compare)

  • Apr 06 07:30

    cblp on master

    Split sum and product (compare)

  • Apr 05 22:42

    cblp on gh-pages

    Extend link (compare)

  • Apr 05 22:42

    cblp on master

    Extend link (compare)

  • Apr 05 22:40

    cblp on gh-pages

    Add links (compare)

  • Apr 05 22:40

    cblp on master

    Add links (compare)

  • Apr 05 22:12

    cblp on gh-pages

    Add "not a bug" notice (compare)

  • Apr 05 22:12

    cblp on master

    Add "not a bug" notice (compare)

  • Apr 05 22:06

    cblp on gh-pages

    Typo (compare)

  • Apr 05 22:05

    cblp on master

    Typo (compare)

  • Apr 05 21:58

    cblp on gh-pages

    Remove unnecessary code (compare)

  • Apr 05 21:58

    cblp on master

    Remove unnecessary code (compare)

  • Apr 05 21:56

    cblp on gh-pages

    Add posts/extensions/2021-04-06… (compare)

  • Apr 05 21:55

    cblp on master

    Add posts/extensions/2021-04-06… (compare)

  • Nov 10 2020 10:34
    cblp commented #110
  • Nov 10 2020 10:33
    cblp commented #110
  • Nov 10 2020 10:33

    cblp on gh-pages

    Update 2017-04-06-react-flux-gu… (compare)

  • Nov 10 2020 10:29

    cblp on react-flux-talk-timecode-fix

    (compare)

  • Nov 10 2020 10:29

    cblp on master

    Update 2017-04-06-react-flux-gu… (compare)

  • Nov 10 2020 10:29
    cblp closed #110
EugineKosenko
@EugineKosenko
Вот такой простенький код. В ghci работает, а после компиляции и запуска из командной строки --- нет.
То есть, не открывается окно с графиком.
Yuriy Syrovetskiy
@cblp
а примеры из пакета работают?
EugineKosenko
@EugineKosenko
Это Demo.hs?
Yuriy Syrovetskiy
@cblp
это которые examples на странице https://hackage.haskell.org/package/gnuplot
да, действительно, этот файл
там всего один файл с примерами
EugineKosenko
@EugineKosenko
Работает. Хотя один пример пришлось убрать.
А так да, выстреливает сразу кучу окон с примерами.
Yuriy Syrovetskiy
@cblp
тогда надо разбираться, что есть в примере и чего нет в вашей программе
EugineKosenko
@EugineKosenko
В демке используется продвинутый интерфейс, а я использую простой.
Ладно, будет время, попробую освоить продвинутый интерфейс.
Yuriy Syrovetskiy
@cblp
простого в демке нет?
попробуйте продвинутый
EugineKosenko
@EugineKosenko
Пока что обошел проблему генерацией в png, которая нормально работает.
Хорошо, спасибо
EugineKosenko
@EugineKosenko
import Graphics.Gnuplot.Advanced
import qualified Graphics.Gnuplot.Plot.TwoDimensional as Plot2D
import qualified Graphics.Gnuplot.Graph.TwoDimensional as Graph2D

list2d :: Plot2D.T Int Integer
list2d = Plot2D.list Graph2D.listPoints [0,1,1,2,3,5,8,13]

main :: IO ()
main = sequence_ [plotDefault list2d]
Вот с продвинутым интерфейсом. Один к одному вырезанный кусок из Demo.hs. Поведение то же самое.
Занятно...
Можно путем вырезания проверить...
Блин...
main = sequence_ [plotDefault list2d,plotDefault list2d]
Вот так вот. Как только два графика вывожу, так все и работает :-(
Но выводится два графика, конечно же, а не один, как нужно...
EugineKosenko
@EugineKosenko
  plotList [] $ ([1,2,3,4,5]::[Int])
  plotList [] $ ([1,2,3,4,5]::[Int])
Вот так работает и в простом интерфейсе. То есть, что-то, похоже, буферируется. Или хрен его знает, почему ему два раза повторять нужно... И опять же, два графика выводится. Криво...
Короче, проще оказалось в выводить в png и потом в gqview анализировать...
Gleb Popov
@arrowd

Интересно, почему в PureScript пишут

class Eq a <= Ord a where

а не

class Eq a => Ord a where
Yuriy Syrovetskiy
@cblp
@arrowd, потому что слева необходимое условие, справа достаточное
Alexander Tchitchigin
@gabriel-fallen
Поясняю: если мы пишем у функции ограничение Ord: foo :: Ord a => a -> Bar a, это значит, что у нас "автоматически" есть ограничение Eq. Но не наоборот.
В PureScript решили, что перевёрнутая стрелка лучше отражает эту закономерность. Так-то они правы. 🙂
Gleb Popov
@arrowd
Ничего не понял, если честно.
Alexander Tchitchigin
@gabriel-fallen
Ord требует наличия Eq. Поэтому когда мы говорим foo :: Ord a => ... это значит foo :: (Eq a, Ord a) => ...
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]