Дмитрий
по моему современные системы и так открывают ссылку правильно, не уверен что понял вопрос
я хочу вызвать внешнюю программу, передав ей ссылку как аргумент...
Alexander
если много с операций как в шеле то шел или туртл могут уменьшить бойлерплейт
Дмитрий
https://www.stackage.org/lts-11.5/package/shelly-1.7.2
Дмитрий
Вот, что приходит на ум.
Зигохистоморфный
Ну черепашка же
Alexander
да хоть process
Дмитрий
А что за черепашка?
Alexander
Shelly и turle уменьшают бойлерплейт если вы баш в Haskell превращаете
Дмитрий
Shelly и turle уменьшают бойлерплейт если вы баш в Haskell превращаете
Тут скорее обратный путь хаскель превращается в баш. Но главная цель всё же не в этом. Благодарю.
Alexander
но ещё раз повторюсь что чтобы запустить достаточно библиотеки process
Anonymous
но ещё раз повторюсь что чтобы запустить достаточно библиотеки process
*реклама* Для вдохновения: используется один process: https://hackage.haskell.org/package/dmc
Ilya
Есть какой-нибудь стандартный тип данных, чтобы хранить функции произвольной арности a -> a -> a -> a -> ... -> a -> a?
Ilya
пока придумалось такое data F a = N (a -> F a) | C a, например plus = N (\x -> N (\y -> C (x + y)))
кана
я правда немного упростил - убрал лишний поинтфри и лишний экволити. Мб он не лишний, но я не понял, нафига он {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-} module Words where class Variadic a r c | c -> r where liftV :: ([a] -> r) -> c instance Variadic a r r where liftV build = build [] instance Variadic a r c => Variadic a r (a -> c) where liftV build arg = liftV $ \args -> build (arg : args) unwordsV :: Variadic String String f => f unwordsV = liftV unwords sumV :: Variadic Int Int f => f sumV = liftV (sum :: [Int] -> Int) showSumV :: Variadic Int String f => f showSumV = liftV (show . sum :: [Int] -> String) main :: IO () main = do print $ unwordsV "abc" "de" "f" print $ sumV (1 :: Int) (2 :: Int) (3 :: Int) print $ showSumV (1 :: Int) (2 :: Int) (3 :: Int)
кана
Выше решение systemspace А, тип
Ilya
пока придумалось такое data F a = N (a -> F a) | C a, например plus = N (\x -> N (\y -> C (x + y)))
но не хочется самому велосипедить если наверняка такое уже есть
Ilya
Выше решение systemspace А, тип
да, нужен тип. А что есть systemspace?
Зигохистоморфный
Kirill
Есть ещё вот такая штука https://hackage.haskell.org/package/universum-1.1.0/docs/Universum-VarArg.html
Ilya
кто это? и чего именно это решение?
Ilya
какой-то задачки?
Зигохистоморфный
какой-то задачки?
Есть такой ресурс codewars
Зигохистоморфный
И там была такая ката
Ilya
не слышал...
Ilya
ката = задача?
кана
да
Ilya
а можно ссылку на кату тогда уж?
Зигохистоморфный
а можно ссылку на кату тогда уж?
Там же поиск есть вроде
кана
https://www.codewars.com/kata/one-function-many-arguments-haskell-style возможно она
кана
да, она
Ilya
Там же поиск есть вроде
было бы условие каты, я бы его вбил в поиск:)
кана
а решение выше - просто обобщение, позволяющие делать из неполивариадик функций поливариадик
Ilya
да, она
благодарю
кана
да
Ilya
не, это фигня
Ilya
такую функцию частично не применишь
Ilya
слишком узкое множество функций
Зигохистоморфный
Хотеть от хаскель вариардик это какое-то странное извращение
Зигохистоморфный
Иди на жс тогда пиши)
Ilya
при чём тут жс?
Ilya
можно
так, хм
Зигохистоморфный
Не понятно зачем такое от хаскель требовать?
Ilya
что значит требовать? хаскель это поддерживает
Ilya
я даже выписал тип уже
Ilya
Есть какой-нибудь стандартный тип данных, чтобы хранить функции произвольной арности a -> a -> a -> a -> ... -> a -> a?
Ilya
пока придумалось такое data F a = N (a -> F a) | C a, например plus = N (\x -> N (\y -> C (x + y)))
Ilya
я лишь поинтересовался, реализован ли такой тип уже где-нибудь
Ilya
чтобы самому не писать бойлерплейт
Зигохистоморфный
Глупости всякие)
Anonymous
при чём тут жс?
На Js такие вещи очень удобно делать. Кстати, на Эрланге тоже. Поддерживать - сплошное удовольствие.
Ilya
я скорее смотрю в сторону Data.Fix
Ilya
но до этого не работал с этим модулем, вот разбираюсь
Alexander
вообще там пара классов типов и все
Зигохистоморфный
у Олега было решение
Да, там с принтом
Alexander
только аннотацию типов добавить, что уже значение нужно и больше аргументов не будет
Alexander
не только с принтом, вон ради Лора я такую штуку с sum писал
Зигохистоморфный
cata cata cata cata hylo hylo :D
кана
так, хм
потому что арность функции выводится из контекста использоавния
кана
если сделать map (sumV 1 2) то он поймет, что ожидается Int -> Int но вообще да, это такое себе решение имхо, просто интересное
кана
я бы массивом делал
кана
пока придумалось такое data F a = N (a -> F a) | C a, например plus = N (\x -> N (\y -> C (x + y)))
проблема такого подхода в том, что ошибки арности будут в рантайме
кана
хотя можно добавить фантомный счетчик как в идрисовекторах
кана
но тогда в чем суть)
Kirill
Да, там с принтом
может и ссылка завялалась?
Зигохистоморфный
может и ссылка завялалась?
Я с телефона, ну и на сайте Олега много чего
Зигохистоморфный
может и ссылка завялалась?
http://okmij.org/ftp/Haskell/polyvariadic.html#polyvar-fn
Зигохистоморфный
С телефона не ок все делать)
Kirill
благодарю премного
Ilya
[a] -> a
да, уже понял, спасибо:) они действительно эквивалентны, просто был заскок с частичным применением
кана
по поводу частичного применения: partially :: ([a] -> b) -> [a] -> ([a] -> b) partially f args = \args' -> f (args <> args')
Alexander
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), вроде бы с точки зрения математики тут никакого пересечения нет. Я что то не так делаю или это ограничение компилятора?
Alexander
и если сделать newtype с GeneralizedNewtypeDeriving, быдет ли это лучше?