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
Chryzalide
@mathy_grandma_twitter

привет
подскажите пожалуйста почему этот код фейлится?

class Path (f :: a -> b)
instance Path id
instance Path const

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

2 replies
Alexander Tchitchigin
@gabriel-fallen
Я подозреваю, это от того, что классы типов определяются для типов, а функции id и const - это термы.
Yuriy Syrovetskiy
@cblp

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

потому что на уровне типов всё, что с маленькой буквы — переменная, и оба инстанса эквивалентны вот такому

instance Path a

и друг другу

unclechu
@unclechu:matrix.org
[m]
@mathy_grandma_twitter: а что хотите получить в итоге? контекст не понятен
тайпклассы — это паттерн-матчинг по типам по сути
сигнатура функции — это тоже тип, можно по сигнатуре сматчить, но не по конкретной функции
unclechu
@unclechu:matrix.org
[m]
class Foo (a :: Type) where foo :: a -> String
instance Foo (a -> a -> a) where foo _ = "a -> a -> a"
instance Foo (a -> a) where foo _ = "a -> a"

main = do
  putStrLn $ foo (+)
  putStrLn $ foo id
в общем для начала нужно понять задачу, перед тем как её решать тем или иным образом
Chryzalide
@mathy_grandma_twitter
Я хотел попробовать квантифицировать по некоторому множеству функций, что-то такое
class Path (f :: a -> b)
class (∀a (f :: a -> a). Path f) => ReflPath f
и подобное
unclechu
@unclechu:matrix.org
[m]

если нужно матчить конкретные функции, то можно использовать symbols-идентификаторы (не уверен в верности терминологии), вроде этого:

data IdFunSym = IdFunSym
data ConstFunSym = ConstFunSym

и матчить уже поним

Gleb Popov
@arrowd
cabal: The package depends on a missing internal executable:
Кабал меня печалит.
Имеется ввиду, что он не пишет о какой именно executable речь.
unclechu
@unclechu:matrix.org
[m]
@arrowd: обычно это одно из: alex, happy, hsc2hs
Gleb Popov
@arrowd
Нет, я как обычно мудрю, и это не тот случай.
Gleb Popov
@arrowd
@cblp I see what you did there input-output-hk/cardano-node#2550
Это ж каким надо быть умным, чтобы в кардану ПРы слать.
Без всякой иронии.
Yuriy Syrovetskiy
@cblp
я там работаю
пока над всякими мелочами
Gleb Popov
@arrowd
Там - в IOHK?
Yuriy Syrovetskiy
@cblp
да, в IOHK и в проекте Cardano
уж лучше бы это была ирония. вот эти штуки совсем простые и доступные любому программисту
Gleb Popov
@arrowd
Я открыл плейграунд для Plutus и не понял там вообще ничего. Да что там, я и в Marlowe нифига не понял, хотя он выглядит явно проще.
Yuriy Syrovetskiy
@cblp
я даже не начинал их трогать пока
Gleb Popov
@arrowd

Чет мне казалось, что я уже спрашивал, но видимо нет.

В сети есть куча материалов по STG (помимо классической статьи) о том как STG исполняется и прочее. Но никто не касается темы как STG отображается на машинный код. Ведь интерпретатор - это медленно. Есть где об этом читнуть (кроме опять же классического папера)?

Gleb Popov
@arrowd
Чем бы на хаскелле булево выражение упростить?
unclechu
@unclechu:matrix.org
[m]
@arrowd: требуется пояснение
Gleb Popov
@arrowd

Ну я составляю выражение из какого-нибудь

data BoolExpr = True | False | And BoolExpr BoolExpr | Or BoolExpr BoolExpr | Not BoolExpr

потом даю его функции simplify :: BoolExpr -> BoolExpr и оно его упрощает.

unclechu
@unclechu:matrix.org
[m]
@arrowd: а как понять вопрос «чем бы упростить»? свою функцию написать, которая рекурсивно будет упрощать, покуда результат не перестаёт быть идентичным?
Gleb Popov
@arrowd
Сложный вопрос, да. Ну в каком-нибудь бытовом смысле. Например, чтобы из !A&!B | !A&B | A&!B получалось !A | !B.
Alexander Tchitchigin
@gabriel-fallen
Если не хочется писать самому, то мне в голову приходит только выдрать такую функцию из одного из SAT-solvers на Haskell.
Gleb Popov
@arrowd
Я потыкал toysolver, но он чёт ничего не упростил.
А как тут SAT поможет?
Gleb Popov
@arrowd
А, типа они под капотом упрощают выражения?
Alexander Tchitchigin
@gabriel-fallen
Да, конечно, упрощают в недрах солвера.
С другой стороны, они обычно упрощают вперемешку с выбором true/false assignment переменным... Прям отдельной функции может и не быть -- надо смотреть.
А так-то это частный случай term rewriting, который много где встречается. Но есть ли спец. библиотеки -- не знаю.
Yuriy Syrovetskiy
@cblp
наверно, есть способы автоматического преобразования в СКНФ/СДНФ
в худшем случае можно перебрать всю область определения и по таблице истинности построить СКНФ/СДНФ
Gleb Popov
@arrowd

в худшем случае можно перебрать всю область определения и по таблице истинности построить СКНФ/СДНФ

Ага, оно вышло что я с СКНФ и начинаю, собственно.

Я так понимаю, в этом случае упрощение - это просто конверсия из СКНФ в СДНФ?
Yuriy Syrovetskiy
@cblp
они в среднем одинакового размера, а в частности длина зависит от количества F и T в таблице истинности
Alexander Tchitchigin
@gabriel-fallen
Что-то мне помнится, что СКНФ/СДНФ -- не самые компактные формы в общем случае...
Yuriy Syrovetskiy
@cblp
да
Gleb Popov
@arrowd
Кажется, я нашел что мне требуется: https://en.wikipedia.org/wiki/Quine%E2%80%93McCluskey_algorithm
Gleb Popov
@arrowd
А история такова была: оказалось, что "изкоробки" для моей задачи работает функция simplify_logic из питоновского пакета sympy. Я стал прошаривать алгоритм и наткнулся на ссылку выше. Для хаскеля этот алгоритм реализован в https://github.com/martinfinke/qm но на Hackage его нет.