@haskellru

Страница 1091 из 1551
kana
14.04.2018
13:29:29
да

Ilya
14.04.2018
13:29:55
не, это фигня

такую функцию частично не применишь

слишком узкое множество функций

Google
Denis
14.04.2018
13:30:47
Хотеть от хаскель вариардик это какое-то странное извращение

Иди на жс тогда пиши)

Ilya
14.04.2018
13:31:18
при чём тут жс?

Ilya
14.04.2018
13:32:04
можно
так, хм

Denis
14.04.2018
13:32:20
Не понятно зачем такое от хаскель требовать?

Ilya
14.04.2018
13:32:52
что значит требовать? хаскель это поддерживает

я даже выписал тип уже

Есть какой-нибудь стандартный тип данных, чтобы хранить функции произвольной арности a -> a -> a -> a -> ... -> a -> a?

пока придумалось такое data F a = N (a -> F a) | C a, например plus = N (\x -> N (\y -> C (x + y)))

я лишь поинтересовался, реализован ли такой тип уже где-нибудь

чтобы самому не писать бойлерплейт

Denis
14.04.2018
13:34:06
Глупости всякие)

Google
Imants
14.04.2018
13:34:23
при чём тут жс?
На Js такие вещи очень удобно делать. Кстати, на Эрланге тоже. Поддерживать - сплошное удовольствие.

Ilya
14.04.2018
13:34:59
я скорее смотрю в сторону Data.Fix

Ilya
14.04.2018
13:36:24
но до этого не работал с этим модулем, вот разбираюсь

Alexander
14.04.2018
13:37:04
вообще там пара классов типов и все

Denis
14.04.2018
13:37:17
у Олега было решение
Да, там с принтом

Alexander
14.04.2018
13:37:22
только аннотацию типов добавить, что уже значение нужно и больше аргументов не будет

Alexander
14.04.2018
13:38:17
не только с принтом, вон ради Лора я такую штуку с sum писал

Denis
14.04.2018
13:38:31
cata cata cata cata hylo hylo :D

kana
14.04.2018
13:38:50
так, хм
потому что арность функции выводится из контекста использоавния

kana
14.04.2018
13:39:29
если сделать map (sumV 1 2) то он поймет, что ожидается Int -> Int но вообще да, это такое себе решение имхо, просто интересное

я бы массивом делал

пока придумалось такое data F a = N (a -> F a) | C a, например plus = N (\x -> N (\y -> C (x + y)))
проблема такого подхода в том, что ошибки арности будут в рантайме

хотя можно добавить фантомный счетчик как в идрисовекторах

но тогда в чем суть)

Kirill
14.04.2018
13:50:15
Да, там с принтом
может и ссылка завялалась?

Denis
14.04.2018
13:52:29
может и ссылка завялалась?
Я с телефона, ну и на сайте Олега много чего

Google
Denis
14.04.2018
13:53:43
может и ссылка завялалась?
http://okmij.org/ftp/Haskell/polyvariadic.html#polyvar-fn

С телефона не ок все делать)

Kirill
14.04.2018
13:57:24
благодарю премного

Ilya
14.04.2018
16:14:45
[a] -> a
да, уже понял, спасибо:) они действительно эквивалентны, просто был заскок с частичным применением

kana
14.04.2018
16:28:20
по поводу частичного применения: partially :: ([a] -> b) -> [a] -> ([a] -> b) partially f args = \args' -> f (args <> args')

Alexander
14.04.2018
16:36:08
class (Monad m) => ConfigMonad m where getConfig :: m Config instance (Monad m) => ConfigMonad (ReaderT Config m) where getConfig = ask instance (ConfigMonad m) => ConfigMonad (ReaderT r m) where getConfig = lift getConfig При попытке вызова выдает Overlapping instances for ConfigMonad (ReaderT Config (ServerPartT IO))(инстансов всего 2), вроде бы с точки зрения математики тут никакого пересечения нет. Я что то не так делаю или это ограничение компилятора?

и если сделать newtype с GeneralizedNewtypeDeriving, быдет ли это лучше?

kana
14.04.2018
16:42:02
class (Monad m) => ConfigMonad m where getConfig :: m Config instance (Monad m) => ConfigMonad (ReaderT Config m) where getConfig = ask instance (ConfigMonad m) => ConfigMonad (ReaderT r m) where getConfig = lift getConfig При попытке вызова выдает Overlapping instances for ConfigMonad (ReaderT Config (ServerPartT IO))(инстансов всего 2), вроде бы с точки зрения математики тут никакого пересечения нет. Я что то не так делаю или это ограничение компилятора?
есть пересечение, ведь ConfigMonad тоже Monad лучше так наверное: class Monad m => MonadConfig m where getConfig :: m Config instance MonadReader Config m => MonadConfig m where getConfig = ask data SomeComplexConfig = SomeComplexConfig { config :: Config , meta :: Meta } instance MonadReader SomeComplexConfig m => MonadConfig m where getConfig = asks config

Alexander
14.04.2018
16:44:20
ну оно же ругается не на теоретически возможное пересечение

а на конкретное инстанцирование, в котором нет пересечения

kana
14.04.2018
16:45:23
есть, я же говорю

Alexander
14.04.2018
16:45:43
видимо меня нужно ткнуть носом как

kana
14.04.2018
16:45:44
второй инстанс перекрывает первый, так как ConfigMonad тоже Monad

Alexander
14.04.2018
16:46:00
клево

в конкретном случае нельзя применить второй инстанс же

kana
14.04.2018
16:46:08
мало того, второй инстанс очень страннй

ты типа цепочку ReaderT делаешь

по моему в mlt вложенные ридеры вообще невозможны

Alexander
14.04.2018
16:46:56
а с чего бы им быть невозможными?

Google
Alexander
14.04.2018
16:49:55
собственно, кейс простой, я хочу сделать композицию из ридера с конфигами и ридера который на основе конфигов и ServerPartT IO аутентифицировать юзеров и класть в ридер

kana
14.04.2018
16:50:17
поому что MonadReader и фандепы, полагаю



(без newtype то же самое, не может сделать ask String, когда MonadReader Int)

Alexander
14.04.2018
16:54:22
сдается мне дело в GeneralizedNewtypeDeriving

kana
14.04.2018
16:54:56


Admin
ERROR: S client not available

kana
14.04.2018
16:55:05
я же написал, что без newtype то же самое

Alexander
14.04.2018
16:55:21
а ок

а какой самый правильный способ завернуть readerT в свой трансформер?

kana
14.04.2018
16:56:07
видел красивое решение mtl с фантомными метками-тегами, тогда можно вложенные ридеры (наверное типа ask @"number")

Alexander
14.04.2018
17:02:05
и всё-таки, почему конкретно мой код фейлит?

чисто из академического интереса

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

patinity
14.04.2018
17:05:25
можете куда то направить в поисках материала чтобы научиться и заодно что то полезное написать на haskell. через поисковики быстро закончились материалы, вдруг что укажете новое

Victor
14.04.2018
17:09:59
@patinity https://www.cardano.org/en/what-is-cardano/

patinity
14.04.2018
17:17:56
@patinity https://www.cardano.org/en/what-is-cardano/
видел выступление Дениса Шевченко на эту тему, благодарю за ссылку, имеете в виду втянуться в это направление, как интересное и полезное? рассуждал с чего простого начать типа парсера что то такое чтобы обучиться хоть чему, криптография конечно любопытно, исходил до этого нужно еще что то уметь, благодарю за наведение на полезную мысль

Victor
14.04.2018
17:31:55
втянуться имеет смысл во что-то, что будет использоваться ежедневно и/или приносить деньги. а писать парсер как бесцелевое упражнение - как напишете, так и забудете

Александр
14.04.2018
17:54:48
Не согласен

Раскрывать мысль не буду, но @patinity посоветовал бы пилить то, что наиболее интересно самому.

Google
Anatolii
14.04.2018
18:04:25
Ну и наверное если есть возмодность написать какой-то маленькие сервис для какой-то реально задачи - лучше сразу с этого начать и задавать тут вопросы по ходу возникновения проблем

Kit
14.04.2018
19:57:06
Кто-нибудь пытался самостоятельно реализовать на хаскеле логику кольца вычитов?

Не могу придумать как их следать классом Number

просто хотел сделать поле Z_p и чет ума не приложу как реализовать

хотя казалось бы такой простой пример

Ilya
14.04.2018
20:01:24
ну поле Z_p и правда простой

Kit
14.04.2018
20:01:29
p должен быть "произвольным"

Я просто не хочу таскать за собой постоянно знание о числе p.

Ilya
14.04.2018
20:05:37
data Z = Z (Int, Int) и вперед

Kit
14.04.2018
20:06:05
Так то можно было бы сделать объявив data Zp = Z (Integer, Integer)

лишнее нагромождение

не кажется?

Ilya
14.04.2018
20:06:34
не кажется?
а как иначе

Страница 1091 из 1551