haskell- все статьи тега


Haskell: навстречу функциональному программированию

Haskell — это функциональный язык программирования, разработанный специально для обработки символьных вычислений и списков.   Данная статья носит обучающий характер и предназначена для новичков, стремящихся понять основные положения Haskell.  Что такое Haskell?  Haskell — широко распространенный чистый функциональный язык. ...

Установка Haskell Gloss

Мне очень трудно понять, что я делаю не так с установкой haskell на windows. Я скачал двоичный файл платформы и запустил его .файл EXE. После этого инструкция на их хакерском сайте говорит мне запустить cabal install gloss. Всякий раз, когда я пытаюсь сделать это в их оболочке GHCI, я получаю следующие ошибки: <interactive>:1:1: Not in scope 'cabal' <interactive>:1:7: Not in scope 'install' <interactive>:1:15: Not in scope 'gloss' Я точно знаю, что cabal install gloss не я ...

Какова цель контрамапа?

Я прочитал много статей о контрамапе и нашел https://hackage.haskell.org/package/contravariant-1.4.1/docs/Data-Functor-Contravariant.html#g:3- это самое лучшее. В любом случае я нашел, как использовать, например: *Lib Data.Functor.Contravariant> a = Predicate (x -> x > 20) *Lib Data.Functor.Contravariant> :t contramap contramap :: Contravariant f => (a -> b) -> f b -> f a *Lib Data.Functor.Contravariant> :t contramap (x -> x * 2) contramap (x -> x * 2) : ...

Как сохранить тип данных Haskell в распакованном векторе в непрерывной памяти

Я хотел бы сохранить непараметрический, распакованный тип данных, такой как data Point3D = Point3D {-# UNPACK #-} !Int {-# UNPACK #-} !Int {-# UNPACK #-} !Int В распакованном векторе. данные.Вектор.Unbox говорит: В частности, распакованные векторы пар представляются в виде пар распакованных векторов. Почему это? Я бы предпочел, чтобы мои Point3D выкладывались один за другим в памяти, чтобы получить быстрый кэш-локальный доступ при последовательном переборе их-эквивалент mystruct[1000] ...

Я думаю, что есть несоответствие типов в определении по умолчанию в Примере Applicative, возможно, в Haskell

В настоящее время я изучаю Хаскелла с профессором Хаттоном "программирование в Хаскелле", и я обнаружил кое-что странное относительно определения возможно как экземпляра класса Applicative. В GHC.Base экземпляр Applicative Maybe определяется следующим образом: instance Applicative Maybe where pure = Just Just f <*> m = fmap f m Nothing <*> _m = Nothing Меня беспокоит строка, которая определяет значение Nothing <*> _ как Nothing. Nothing имеет тип Maybe ...

Как реализовать вложенные функции в haskell

Недавно я столкнулся с этим вопросом: , который в основном спрашивает, как реализовать эту функцию для вычисления предела f (n): Как бы я реализовал это в haskell? Я пытаюсь научиться функциональному программированию, и это кажется мне сейчас хорошей задачей ...

Скрыть конструктор, но не тип при импорте

У меня есть внутренний модуль, для которого я хотел бы предоставить внешний API module Positive.Internal where newtype Positive a = Positive { getPositive :: a } deriving (Eq, Ord) -- smart constructor toPositive :: (Num a, Ord a) => a -> Maybe (Positive a) toPositive a | a <= 0 = Nothing | otherwise = Just $ Positive a -- ... Я хочу скрыть тупой конструктор и заменить его однонаправленным чтобы пользователи все еще могли сопоставлять значения шаблону, им просто ...

Частичный разбор JSON-объектов с aeson в Haskell

Я делаю довольно простой веб-сервис CRUD в Haskell с варпом (и, возможно, Скотти) и кислотным состоянием. В кислотном состоянии я храню записи пользователей в данных.Карта (согласноэтому примеру). Я знаю, что эти записи всегда будут полными при создании, поэтому мне не нужно квалифицироваться с большим количеством "может быть". Однако при обновлении пользователя клиент может выбрать отправку частичного объекта json с заполнением только некоторых полей. Каким был бы идиоматический способ предс ...

Является ли следующая функция хвостового вызова optmized?

Я новичок в haskell (впервые пробую FN программирование) и просто пробую различные упражнения из книги "реальный мир haskell". Может ли кто-нибудь, пожалуйста, исправить меня и сказать, оптимизирована ли функция ниже хвостового вызова или нет? Если да, то не могли бы вы поправить меня, как это делается? Я добавляю 1 к рекурсивной функции, поэтому я считаю, что это должно вызвать исключение stackoverflow? Я попытался вызвать myLength [1..2000000] но это не вызвало никакого исключения stackoverfl ...

Лучший способ замены подстроки в haskell

Задача довольно проста: я должен заменить все случаи "fooo" и все его подстроки на "xyz". В Java, например, я сделаю это так: someString.replaceAll( "fooo|foo|fo", "xyz" ) И это будет делать трюк. Но в Хаскелле я не нашел эффективного способа работать с регулярным выражением. Прежде всего, я прочитал следующее: http://www.haskell.org/haskellwiki/Regular_expressions Единственная библиотека, которая на самом деле имеет функцию replace,-это regex-posix, но она считается "очень медленной" по ...

F# vs Haskell vs Lisp - какой язык выучить? [закрытый]

Я много слышал о функциональных языках программирования и готов выучить один из них. Я думаю, что это будет в основном для удовольствия, однако, я надеюсь, что это улучшит мои навыки программирования. У меня в основном фон C#/.NET, поэтому мой первый выбор-изучить F# (из-за .NET и знакомства с Visual Studio). С другой стороны, мне интересно, есть ли у F# такие функции, как макросы Lisp или функции более высокого порядка Haskell. Не могли бы вы сравнить F#, Haskell и Lisp? Какой из них будет пе ...

Хорошие ресурсы по использованию функционального программирования в разработке игр? [закрытый]

Я довольно новичок в этой парадигме функционального программирования, но пока она мне нравится. Поскольку я занимаюсь разработкой игр, я хочу попробовать это в написании некоторых игр в чисто функциональном стиле программирования. Я не возражаю против языка-будь то Erlang, Haskell, Lisp или даже Ruby (я обнаружил, что он поддерживает функциональные черты программирования). Ну, очевидно, что для изучения функционального программирования (на самом деле, чего угодно) лучшим советом было бы просто ...

использование операторов с zipWithN

Скажем, мы можем написать что-то вроде этого: zipWith (,) [1,2,3] [4,5,6] Если мы хотим, чтобы кортеж 3 список, мы можем написать: zipWith3 (,,) [1,2,3] [4,5,6] [7,8,9] Мы также можем использовать zipWith4 (,,,) zipWith5(,,,,) и так далее. Теперь я хочу сделать то же самое, но используя оператор добавления вместо запятой. Есть ли способ определить его таким же кратким способом, не используя лямбды, как в zipWith3 (a b c -> a + b + c) [1, 2, 3] [4, 5, 6] [7, 8, 9] Заранее спаси ...

функция zipWith в Haskell

ghci> zipWith' (zipWith' (*)) [[1,2,3],[3,5,6],[2,3,4]] [[3,2,2],[3,4,5],[5,4,3]] Функция zipWith 'use function' * ' и параметры после нее, чтобы получить возврат.Но в этом случае,как функция zipWith ' получить результат [[3,4,6],[9,20,30],[10,12,12]] . Пример кода с использованием zipWith был взят дословно из бесплатной онлайн-книгиLearn You a Haskell for Great Good . ...

Сравнение скорости с проектом Эйлера: C vs Python vs Erlang vs Haskell

я взял #12 С Проект Эйлера как упражнение по программированию и сравнить мои (конечно, не оптимальные) реализации в C, Python, Erlang и Haskell. Чтобы получить более высокое время выполнения, я ищу первое число треугольника с более чем 1000 делителями вместо 500, как указано в исходной задаче. результат следующее: C: lorenzo@enzo:~/erlang$ gcc -lm -o euler12.bin euler12.c lorenzo@enzo:~/erlang$ time ./euler12.bin 842161320 real 0m11.074s user 0m11.070s sys 0m0.000s Python: lorenzo@e ...

Как может существовать функция времени в функциональном программировании?

Я должен признать, что я не знаю много о функциональном программировании. Я читал об этом здесь и там, и поэтому узнал, что в функциональном программировании функция возвращает один и тот же выход для одного и того же входа, независимо от того, сколько раз функция вызывается. Это точно так же, как математическая функция, которая вычисляет один и тот же выход для одного и того же значения входных параметров, которые участвуют в выражении функции. например, рассмотрим это: f(x,y) = x*x + y; // I ...

Зачем нужны монады?

на мой скромный взгляд ответы на знаменитый вопрос " Что такое монада?"особенно самые проголосовавшие, пытаются объяснить, что такое монада без четкого объяснения почему монады действительно необходимы. Можно ли их объяснить как решение проблемы? ...

Что делает ключевое слово 'forall' в Haskell/GHC?

я начинаю понимать, как forall ключевое слово используется в так называемых "экзистенциальных типов" вроде этого: data ShowBox = forall s. Show s => SB s это только подмножество, однако, как forall используется, и я просто не могу обернуть свой ум вокруг его использования в таких вещах, как это: runST :: forall a. (forall s. ST s a) -> a или объясняя, почему они разные: foo :: (forall a. a -> a) -> (Char,Bool) bar :: forall a. ((a -> a) -> (Char, Bool)) и все RankNType ...

Что такого плохого в шаблоне Haskell?

похоже, что шаблон Haskell часто рассматривается сообществом Haskell как неудачное удобство. Трудно выразить словами то, что я наблюдал в этом отношении, но рассмотрим эти несколько примеров шаблон Haskell указан в разделе " уродливый (но необходимый)" в ответ на вопрос, какие расширения Haskell (GHC) должны использовать/избегать пользователи? шаблон Haskell считается временным / низшим решением в распакованные векторы в NewType бы значения thread (список рассылки библиотек) Yesod часто крити ...

Что такое ответ Haskell на узел.Джей?

Я считаю, что сообщество Erlang не завидует Node.js, поскольку он не блокирует ввод-вывод изначально и имеет способы легко масштабировать развертывания до более чем одного процессора (что-то даже не встроенное в узел.js). Подробнее на http://journal.dedasys.com/2010/04/29/erlang-vs-node-js и узел.js или Erlang а как же Хаскелл? Может ли Haskell предоставить некоторые преимущества Node.js, а именно чистое решение, чтобы избежать блокировки ввода / вывода без обращения к многопоточное программи ...