169 похожих чатов

Добрый день, подскажите есть ли в хаскеле возможность получить представление

типа функции в виде значения?
Те что-то подобное псевдокоду:
reprOf (:) = Function (Tp "a1") (Function (Tp "a2") (Tp "a2"))

16 ответов

16 просмотров

@effectfully

да Prelude Data.Typeable> data A Prelude Data.Typeable> typeOf ((:) @A) A -> [ A ] -> [ A ]

можно с адскими хаками: https://github.com/effectfully/sketches/tree/master/poly-type-of-saga/part2-enumerate-type-vars (но имена я там из воздуха беру)

Анатолий-Кот Автор вопроса
Cheese Syrowiecki
да Prelude Data.Typeable> data A Prelude Data.Typ...

мне нужно чтобы с дженериками работало

Анатолий Кот
мне нужно чтобы с дженериками работало

Дженерики хаскелёвые или то что понимают во всех остальных языках?

Yan Shkurinskiy
Дженерики хаскелёвые или то что понимают во всех о...

параметрический полиморфизм везде понимают

если функция известна статически, то можно спросить у компилятора через TH > $(lift . show =<< reify '(:)) DataConI GHC.Types.: ( ForallT [ KindedTV a_3530822107858468865 StarT ] [] ( AppT ( AppT ArrowT ( VarT a_3530822107858468865 ) ) ( AppT ( AppT ArrowT ( AppT ListT ( VarT a_3530822107858468865 ) ) ) ( AppT ListT ( VarT a_3530822107858468865 ) ) ) ) ) GHC.Types.[]

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

Анатолий-Кот Автор вопроса
Cheese Syrowiecki
может, если вы расскажете, для чего вам это нужно,...

Я хочу для такого типа newtype StrId a = StrId { runId :: a } написать fmap (и <*>), который будет вычислять fmap f (StrId a) = StrId (f $! a), если для переданной функции f :: a -> ... -> b, a не совпадает c b и fmap f (StrId a) = StrId (f a) в противном думал это можно c Typeable сделать, но он не работает с типопараметрами

Анатолий Кот
Я хочу для такого типа newtype StrId a = StrId { ...

у хаскеля очень специфичный чекер равенства на тайп-левеле, так что например сказать, являются ли a и [a] разными типами, он не сможет, если a предварительно не привести к чему-то более конкретному

Анатолий Кот
Я хочу для такого типа newtype StrId a = StrId { ...

Похоже, такое можно просто с тайпклассами сделать

Ilya Kos
Похоже, такое можно просто с тайпклассами сделать

на инстанс Functor нельзя навешивать дополнительные ограничения. скорее всего, на этом сломается

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта