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

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

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

16 ответов

14 просмотров

@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 нельзя навешивать дополнительные ограничения. скорее всего, на этом сломается

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

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

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
что за асемблер кста?
Shvabrikk Nya
19
всем привет. реально ли понять чем в процессе занята память? delphi/linux, процесс свой
Handatros
12
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
This automated cryptocurrency trading system uses intelligent algorithms to buy low and sell high on leading crypto exchanges. Many users have already enjoyed significant prof...
Endu Wako
1
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Сделал краткий обзор магазина из статьи и заодно там же записал инструкцию по развёртыванию. https://www.youtube.com/watch?v=8-sE1vNk95Q (чё думаете по звуку? кое-что поменял...
Andrey K
17
Привет, коллеги! Возникла задача ограничить максимальный размер вложений для определённых расширений, например, чтобы для изображений лимит был 10 МБ, а для видео — 100 МБ. Ог...
Andro
1
Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Карта сайта