Вопросы с тегами [haskell]

2

голосов
2

ответ
11

Просмотры

Функционально изменение имен ключей в сериализации эсона с ключами текста

У меня есть объект JSON с вручную созданным экземпляром ToJSON. Я хотел бы заменить это функция, которая не требует моего явного перечисления ключевых имен. Я использую «Rec *» в качестве префикса я хотел бы раздеться, и мои поля начинаются как текст, а не строки. Начиная с минимальными данными: данные R3 = R3 {recCode :: Code, recValue :: Value} вывода (Show, Generic) и смарт-функции конструктора: makeR3 rawcode rawval = R3 значение кода, где код = значение rawcode = rawval Эта реализация работает отлично: экземпляр ToJSON R3, где toJSON (R3 recCode recValue) = объект [ «код». = recCode, «значение». = recValue] Но, как вы можете себе представить, печатал все ключевое имя вручную из «коды» в «recCode» это не то, что я хочу сделать. tmp_r3 = makeR3 "ТД" "100,42" as_json = закодировать tmp_r3 основных = делать испустил = encodeToLazyText tmp_r3 I.putStrLn из I.writeFile "./so.json" из возврата () Выход правильно: { "значение": 100,42, "код": "TD"} - не recValue и recCode, правильно! Однако, когда я пытаюсь эту функцию, она становится не в состоянии преобразовать текст в строку, как это было автоматически раньше. экземпляр ToJSON R3, где toJSON = genericToJSON defaultOptions {fieldLabelModifier = T.toLower. IHaskellPrelude.drop 3} Выход:: 8: 35: ошибка: • Не могли бы соответствовать типа 'Текст' с 'String' Прогнозный Тип: String -> String, фактический тип: String -> Text • В поле 'fieldLabelModifier' из запись В первом аргументе «genericToJSON», а именно «defaultOptions {fieldLabelModifier = ToLower. IHaskellPrelude.drop 3}»В выражении: genericToJSON defaultOptions {fieldLabelModifier = ToLower. IHaskellPrelude.drop 3}: 8: 47: ошибка: • Не удается соответствовать типу 'строка' с 'Text' Ожидаемый тип: String -> Text Фактическая Тип: String -> Строка • Во втором аргументе '(.)' , а именно «IHaskellPrelude.drop 3» В поле «» fieldLabelModifier из записи в первый аргумент «genericToJSON», а именно «defaultOptions {fieldLabelModifier = ToLower. IHaskellPrelude.drop 3}»Сама ошибка достаточно ясно, что текст не работает, но то, что я должен изменить, чтобы лишить мои префиксы из функционально наименования ключей вывода JSON, а также правильно преобразовать текст в строку? Я также немного смущен, что я не изменил мой вход, это тип текста в обоих случаях, но первая реализация была в порядке, чтобы работать с ним, в то время как второй не было. Я работаю в ihaskell jupyter ноутбука.
Mittenchops
6

голосов
0

ответ
104

Просмотры

Как оптимизировать параллельную сортировку улучшить временную работу?

У меня есть алгоритм параллельной сортировки списка заданной длины: импорт Control.Parallel (пар, pseq) импорт Data.Time.Clock (diffUTCTime, GetCurrentTime) импорт System.Environment (getArgs) импорт System.Random (StdGen, getStdGen, Randoms) parSort :: (Ord а) => [а] -> [а] parSort (х: хз) = сила больше `par` (заставить меньшую` pseq` (менее ++ х: больше)), где меньшие = parSort [у | у [а] -> [а] сортировки (х: хз) = меньшее ++ х: больше, где меньше, = рода [у | у (сила) хз = хз идут `pseq` (), где идут (_: хз) = идти хз идти [] = 1 randomInts :: Int -> StdGen -> [Int] randomInts кг = позволяют Result = принять к (Randoms г) в результате силы `seq` результат функции теста = parSort основных = делать арг
Vasiliy
1

голосов
1

ответ
58

Просмотры

На верхнем уровне, результаты будут сохраняться в памяти

Я работаю через книгу https://www.packtpub.com/application-development/haskell-high-performance-programming и в настоящее время, я пытаюсь понять запоминание. Она показывает следующую функцию: мемоизации fib_mem :: Int -> Целое число fib_mem = (Карта Фибо [0 ..] !!), где FIB 0 = 1 FIB 1 = 1 FIB п = fib_mem (п-2) + fib_mem (н- 1) в книге, он говорит: Так что, если fib_mem определяется на верхнем уровне, то результаты будут сохраняться в памяти в течение срока службы самой программы! Что это значит, определить на высшем уровне?
zero_coding
1

голосов
1

ответ
55

Просмотры

Пространственно Количественное без конструкторов данных

Легко получить экзистенциальную квантификацию по упаковке словарей в конструкторах данных. {- # LANGUAGE GADTs # -} данных S, где MKS :: Показать а => а -> S F :: Int -> S = FX случай х 0 -> MKS 0 _ -> MKS "ненулевая" Соответствующий раздел в руководстве GHC явно говорит о «Экзистенциально количественно конструкторах данных». Можно ли написать один и тот же код, но без введения дополнительных типов данных и конструкторов, то есть что-то с подписью, как F :: Int -> (. Существует Покажите => а) Fx = случай х 0 -> 0 _ -> «ненулевой» Если нет, то есть документально причина, почему такое ограничение существует? Как избежать добавления нового квантора?
theindigamer
1

голосов
1

ответ
76

Просмотры

Haskell не поддерживает юникод конструктор символов (например: ◁)?

Например: {- # LANGUAGE UnicodeSyntax # -} данные Символического п = Constant п | Переменная строка | Символический п + Символический п | Символический п * Символическая п | Символический п: ◁ Символического п происходящий (Показать) Этот код успешно загружен в GHCi. Тогда я вход: Constant 2: * Переменная «а» Это нормально. Но когда я вход: Constant 2: ◁ переменной «а» *** Исключение:: hPutChar: неверный аргумент (неверный символ) Означает ли это, что Haskell не поддерживает Unicode конструктор символов? Как сделать его поддержку Unicode конструктора символов? Окружающая среда: GHCi 8.6.3 (WinGHCi) для Windows 7 Спасибо. Новое наблюдение: Это работает, когда ◁ появился в исходном файле, но вы не можете ввести ◁ в РЕПЛЕ (я использую WinGHCi).
chansey
1

голосов
1

ответ
62

Просмотры

Пожалуйста, помогите понять Haskell Parallel

Я читал некоторые документы, используя в качестве примера Фибоначчи. Тогда я начал пытаться parallelise мой код в основном работает со списком. Мой код не получил быстрее. Пример кода: parMap :: (а -> б) -> [а] -> [б] parMap е = withStrategy (parList rseq). Карта F parZipWith :: (а -> б -> с) -> [а] -> [Ь] -> [с] parZipWith е а = withStrategy (parList rseq). zipWith е в качестве основных = дайте рипы = parMap parseIPRange [] - огромный список предметов, как «192.168.3.1/24» результат = parZipWith checkSubnets рипы (хвост срывает ++ [IPRange 0 0]) результат печати Я думаю, что я должен иметь неправильно все это. PS: Все это является мигрирующим из https://github.com/magicloud/ip_helper, который Rust с районом.
Magicloud
0

голосов
1

ответ
19

Просмотры

Как создать декартово объединение списка кортежей на основе их первого значения?

У меня есть список кортежей типа (Int, String) и я хочу, чтобы создать список типа [String], в которой каждая строка представляет собой декартово присоединиться к перестановке вторых элементов кортежей, которые имеют такое же значение, Int. Например: ввод: [(1, "ABC"), (1, "DEF"), (2, "GHI"), (2, "Ы")] Выход: [ "объявление", "ае", " аф», "бод", "быть", "БФ", "CD", "се", "сравни", "дк", "гЛ", "кк", "гектолитров", "ик", "иль" ] Я попытался это, но я не могу найти способ просто перестановкой кортежи с одинаковым значением Int: possible_keys :: [(Int, String)] -> [String] possible_keys подразделов = [ключ | размер ключа
Guilherme Lima
1

голосов
0

ответ
46

Просмотры

How to add tarball (Cardinality package) to dependency with stack?

У меня есть MYLIB пакет библиотеки и MYAPP приложения. Я хочу использовать пакет мощностного в MyLib, который доступен только как тарболл. Таким образом, я добавил к MYLIB stack.yaml: пакеты: ... - местоположение: https://hackage.haskell.org/package/Cardinality-0.2/Cardinality-0.2.tar.gz экстра-отд: истинно Тогда я добавить междусобойчик файл проекта MyLib: наращивание зависит: ..., Cardinality И это компилируется. Теперь я пытаюсь построить MYAPP инструмент, который зависит от MYLIB: пакеты: ... - "../mylib Но я получаю сообщение об ошибке: Ошибка: При построении плана сборки, следующие исключения встречались: В зависимости для MyLib : Cardinality должен соответствовать -любе, но конфигурация стеки не имеет указанную версии (последняя версия соответствия 0,2), необходимые, поскольку MyLib является целью сборки. Некоторые возможные пути для решения этой проблемы: * Рекомендуемое действие: попробуйте добавить следующее к экстра-DEPS в /home/XXXX/prj/myapp/stack.yaml: - Cardinality-0,2 * Установить «Разрешить-новее правда», чтобы игнорировать все версии ограничения и построить в любом случае. * Вы также можете попробовать использовать команду «стек решатель». План строительства не удалось. Так, как добавить мощностный тарболл к MYLIB пакета в правильном пути ?!
Paul-AG
1

голосов
0

ответ
48

Просмотры

Повторение ограничений класса в случаях

Почему первое объявление экземпляра требует явного упоминания о Num а где второй не делает? Почему не может Num быть в равной степени судить по классу ограничения С1 в обоих случаях? Класс Num а => С1 AB экземпляр (Числа а, C1-Int) => С1 класса Char С1 AB => экземпляр С2 С2 аб Int => С2 полукокса
Clinton
1

голосов
1

ответ
155

Просмотры

Использование ReaderT трансформатора в ScottyT (против ActionT)

Я пытаюсь нить конфигурацию через мой Скотти на основе приложения с помощью ReaderT монады трансформатора подход, и возникают проблемы, делая так. Я должен использовать конфигурацию, как при определении маршрутов (как некоторые из них зависят от конфигурации) и при обработке реальных запросов. Последние прекрасно работает в ActionT, но независимо от того, что я стараюсь, я просто не могу получить типы прямо в ScottyT. Вот минимальный пример я составил из образца ReaderT из Скотти GitHub хранилища: {- # LANGUAGE GeneralizedNewtypeDeriving # -} {- # LANGUAGE OverloadedStrings # -} модуль Main, где импорт Control.Applicative импорта Control.Monad.Reader (MonadIO, MonadReader, ReaderT , спрашивает, лифт, runReaderT) импорт Data.Default.Class (DEF) импорт Data.Text.Lazy (текст, упаковка) импорт Prelude импорта Web.Scotty.Trans (ScottyT, получить, scottyOptsT, текст,
SkyWriter
1

голосов
0

ответ
260

Просмотры

В третий раз это очарование - Недетерминированная Стопка / GHC

Я пытался установить текст пакета с использованием стека внутри Ubuntu VM. Самое смешное - это не работа в первый раз (Stack останавливается с Segfault), он не работает во второй раз (внутренняя ошибка GHC), но она работает в третий раз. VM устанавливается с помощью следующей Vagrantfile. # - * - режим: рубин - * - # VI: множество Р = рубин: Vagrant.configure (2) делать | конфигурации | config.vm.box = "/ trusty64 убунту" config.ssh.forward_x11 = истинный config.vm.provider "VirtualBox" сделать | VB | vb.memory = "1024" vb.cpus = 1 конец config.vm.hostname = "стек-проект" config.vm.provision "оболочки", путь: "root-bootstrap.sh" Файл root-bootstrap.sh является #! / bin / Баш установлен -x набор -e экспорта DEBIAN_FRONTEND = "неинтерактивным" APT-получить обновление -qq &> / DEV / нуль APT-получить -qq установить программное обеспечение-свойства-общие \ PKG-конфигурации Wget DPKG нано ВИМ \ &> / DEV / нуль # Haskell Стек Wget -qO- https://get.haskellstack.org/ | ш Чаун -R бродяга $ HOME После запуска бродяги до && бродячей SSH (оба файла должен быть помещен в той же папке), я проверил, что стек был установлен. бродяга @ стек проект: ~ $ стек --version Версии 1.6.3 Git редакция b27e629b8c4ce369e3b8273f04db193b060000db (5454 фиксаций) x86_64 hpack-0.20.0 Я попытался установить текст следующей бродягу @ стек проект: ~ $ стопки установить --resolver lts- 10.3 Ввод текста неявное глобальный конфигурационный файл проекта: /home/vagrant/.stack/global-project/stack.yaml Примечание: Вы можете изменить снимок с помощью поля распознавателя там. Использование распознаватель: LTS-10,3 указано в командной строке Загруженные LTS-10.3 плана сборки. Подготовка к установке GHC в изолированном месте. Это не будет мешать любой установки на системном уровне. Предупреждение: Повторите число 0 после полной задержки 0 нами Если вы видите это предупреждение и стек не удается загрузить, но опять же, выполнив команду решает эту проблему, пожалуйста, сообщите здесь: https://github.com/commercialhaskell/stack/issues/ 3510 Загруженные GHC-8.2.2. Установленная GHC. Выбранный зеркало https://s3.amazonaws.com/hackage.fpcomplete.com/ Загрузка корневой Selected зеркало https://s3.amazonaws.com/hackage.fpcomplete.com/ Загрузка временных меток Выгрузка снимков Загрузка зеркал Не удается обновить индекс (без локального копия) Загрузка индекса Обновленного индекс пакета обновление загружен полностью заселенный кэш индекса. вина Сегментация (ядро сбрасывали) Я заметил, что ВМ имеет ~ 75 МБ свободной памяти, когда происходит выдаёт ошибку сегментации. стек работа / расстояние / x86_64-Linux / Cabal-2.0.1.0 / сборки / Data / Text.o) GHC: Внутренняя ошибка: Не удается совершить 1048576 байт памяти (GHC версия 8.2.2 для x86_64_unknown_linux) Пожалуйста, сообщите об этом как GHC ошибка: http://www.haskell.org/ghc/reportabug Можно подумать, что повторный запуск стека установки даст ту же ошибку GHC снова, правда? Неправильно. бродяга @ стек проекта: ~ $ стопка установить --cabal-многословным --resolver LTS-10,3 текстовая 1.2.2.2: настройка текстового 1.2.2.2: строить текст-1.2.2.2: копирование / регистрация В качестве проверки, я попытался с помощью стека GHCI --ghc-опций «-package текст», который работал хорошо, и я мог бы использовать функции нормально. Я установил мегапарсек (любая библиотека в зависимости от текста будет делать), и он установлен штраф. Какую комбинацию ошибки стеки, ошибка GHC и призрак я встретив здесь? Другие вещи, которые могут иметь отношение: Билет 4012 - Компиляция результаты не являются детерминированными. Если бы я угадал, это разница между второй раз и в третий раз. Версия вехи в настоящее время 8.4.1, в то время как GHC в LTS-10.3 8.2.2. МКВП +2016 бумаги (косвенно?), Утверждая, что GHC 8.0.2 является детерминированным.
theindigamer
1

голосов
0

ответ
64

Просмотры

После определения названия классов типов в Haskell, что делает вертикальный брусок следует функция означает? [Дубликат]

Этот вопрос уже есть ответ здесь: Что такое «|» для определения класса Haskell? 2 ответы Функциональные зависимости в Haskell 3 ответов я взглянуть на библиотеку Мпс и заметил, что класс определяется как класс (поток с, A.Alternative м, MonadPlus м) => MonadParsec ESM | м -> эс, где я знаю, что я создаю класс типа с именем MonadParsec, но то, что делает | м -> эс означает?
mtber75
1

голосов
0

ответ
84

Просмотры

Define function independent of specific value constructor (templates?)

Is it possible to write a function for generic types (in this case applicatives) without making assumptions about the name of type constructors? I can write the following: f :: Maybe a -> Maybe a f (Just a) = (Just a) That one works on Maybes and only instances with the Just constructor. But say I had different types that have a value constructor that had the same name as the type constructor: data T a = T a instance Functor T where fmap f (T a) = T (f a) instance Applicative T where pure = T (T f) (T something) = fmap f (T something) data U a = U a instance Functor U where fmap f (U a) = U (f a) instance Applicative U where pure = U (U f) (U something) = fmap f (U something) In this case T and U are isomorphic, but maybe they also would have constructors that are special to either one in a real example... does not matter here. Now what if wanted a function that operates both on T and U... I could write the function two times, like so: gt :: T a -> T a gt (T x) = T x gu :: U a -> U a gu (U x) = U x Is there also a way to make a template for this function like this? g :: (Applicative f) => f a -> f a g (f x) = f x That will give me a syntax error for some reason, even though it has the same structure as gt and gu. If there is no way to do that then why not?
lo tolmencre
1

голосов
1

ответ
39

Просмотры

Строка Выписка из ОткрытыйКлюч из Crypto.PubKey.Ed25519

Это мой код, пытается в GHCI импорт Crypto.PubKey.Ed25519 импорт Crypto.Error Импорт Data.ByteString.Char8 ул :: Строка, ул = "hellohellohellohelloǰello% $ * / õƲ" getSecretKey seedString = throwCryptoError (SecretKey (упаковка seedString )) getPublicKey SecretKey = toPublic SecretKey ск = getSecretKey ул рк = getPublicKey ск здесь значение PK является PublicKey «\ 134m \ 130f \ 142 \ CAN \ 190 \ V, \ 228 \ 190 \ 232v \ 171 \ 243] 5 \ CAN \ т \ 211 \ 151 \ DC1] \ 188 \ т \ 206 \ 233К \ 190 \ 237 \ 218> "Я хочу, чтобы извлечь часть строки" \ 134m \ 130f \ 142 \ CAN \ 190 \ V, \ 228 \ 190 \ 232v \ 171 \ 243] 5 \ CAN \ т \ 211 \ 151 \ DC1] \ 188 \ т \ 206 \ 233К \ 190 \ 237 \ 218>», как я могу это сделать?
Mahesh Uligade
1

голосов
0

ответ
53

Просмотры

Mockable Функциональности путем смешивания монада трансформаторов

Как я могу строить отдельные функциональные возможности в независимых и mockable монад, а затем положить их вместе в моем главном приложении монады? Например, давайте предположим, что мое приложение имеет функцию чата. Я следую Модульное тестирование effectful Haskell с монады-макете, и я должен быть в состоянии легко переключиться на выполнение простого сервера чата в моем приложении. Я попытался смоделировать чат двигатель, монады: класс Монада т => ChatEngine мы, где Войти :: Имя пользователя -> м (S.Set пользователь) опубликовать :: Имя пользователя -> PostBody -> м [сообщение] allPosts :: м [ Post] по умолчанию Войти :: (MonadTrans т, ChatEngine м 'м ~ т т') => Имя пользователя -> м (S.Set Пользователь) Войти = лифт. Логин по умолчанию публиковать :: (MonadTrans т, ChatEngine т 'т ~ т т') => Имя пользователя -> PostBody -> м [Post] публиковать и = лифт. опубликовать у по умолчанию allPosts :: (MonadTrans т, ChatEngine м «м ~ т т») => м [Сообщение] allPosts = экземпляр подъема allPosts ChatEngine м => ChatEngine (Exceptt эм) - ... АЦБК м мое приложение монада, которая может быть основной монады в любой стек трансформатора, как веб-сервер Скотти: АЦБК ма типа = ReaderT AppConfig м а. Я могу добавить StateT или MonadIO в стек АЦБК и реализует интерфейс ChatEngine для АЦБК. Но что, если я хочу использовать по умолчанию, предварительно сделанный экземпляр ChatEngine? Например, это просто насмешка: данные InMemoryChat = {InMemoryChat пользователи :: S.Set пользователь, сообщения :: [Post]} Newtype MockedChatEngine м = MockedChatEngine {unMockChatEngine :: StateT InMemoryChat ма} вывод (Functor, Аппликативный, Монада, MonadTrans, MonadIO , экземпляр MonadError е, MonadReader г, MonadWriter ш, MonadState InMemoryChat) (MonadIO м, Монада м) =>
homam
1

голосов
1

ответ
54

Просмотры

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

Я пытаюсь создать функцию, которая позволяет пользователю не нравится фильм. Однако пользователь может существовать только в списке нравится / не нравится, но не оба addUserDislikes :: Title -> Пользователь -> [Фильм] -> [Фильм] addUserDislikes названия пользователь дб = [если ти == название && эля нелюбовь пользователя == Ложное то (ти, ди, уг, как нелюбовь ++ [пользователь]) еще (ти, ди, год, как, нелюбовь) | (Ти, ди, год, как, не любят)
sam786
1

голосов
1

ответ
78

Просмотры

Haskell-ВИМ, теперь не в состоянии установить в nixos

nixos 17,09 Установка Haskell-ВИМ-теперь, как предложено здесь Баш /home/tort/.config/haskell-vim-now/.vimrc ~ / .vim -> /home/tort/.config/haskell-vim-now/.vim --- Установка плагинов с помощью ВИМ-плагин ... HvnArgs {hvnArgsNoHoogleDb = False, hvnArgsNoHelperBinaries = False} Установка GHC при необходимости ... / бен / ш: стек: команда не найдена настройка стека завершилась с ошибкой 127 *** setup_haskell .hs с ошибкой 1. *** Aborting ... Почему скрипт не видит стек? [Хост @ хост: ~] $, которые складывают /home/tort/.nix-profile/bin/stack [хост @ хост: ~] $ Никс-окр -q '*. * Стек' стек 1.5.1 stack2nix- 0.1.3.0 Спасибо заранее!
tort
1

голосов
1

ответ
88

Просмотры

Haskell: Где найти отладочный вывод трассировки на Windows 10

Я использую след для отладки на Windows 10, и терминальные состояния, что журналы, напечатанные на консоль, но я понятия не имею, где найти этот выход.
Lo HaBuyshan
0

голосов
3

ответ
279

Просмотры

Добавление двух функций вместе в Haskell

Привет Я новичок в Haskell, и я наткнулся на интересную проблему, но я не был уверен в том, как я бы идти о ее решения. Я собираюсь показать вам только две части вопроса в качестве примера. Вопрос заключается в том, что мы должны ввести число от 13 до 15 цифр. затем из этого числа мы удаляем последний номер. такие как 19283828382133 следует из положить точно такие же число раз без окончательных 3, 1928382838213. Тогда будет удвоен каждый нечетный разряд (не число) из этих чисел. Таким образом, вы получите 2,9,4,8,6 и т.д. Это мой код до сих пор. Как вы можете видеть из кода я был в состоянии выполнить эти две части по отдельности (рабочий), но я не уверен, как я хотел бы добавить их вместе. lastdigit :: Integer -> Integer - Эта функция удаляет последний номер lastdigit х = x`div`10 doubleOdd (х: хз) = (2 * х): (DoubleEven хз) - Эта функция удваивается каждый нечетный разряд не число. doubleOdd [] = [] doubleEven (х: хз) = х: (doubleOdd хз) doubleEven [] = [] Таким образом, чтобы в дальнейшем объяснить программу, которую я пытаюсь построить сначала пройти через стадию принятия в количестве от 13 до 15 цифр. Тогда он будет первым удалить последний номер автоматически перейти к следующему шагу удвоения каждой нечетной цифры (не число). Спасибо
cars
1

голосов
0

ответ
42

Просмотры

Haskell SQLError с HDBC

Я хочу, чтобы прочитать файл с большим количеством строк и хочу сохранить их в моей таблице. Все это хорошо, но когда он достигнет последнего элемента моей первой линии его остановить с SQLERROR. readLines :: FilePath -> IO () readLines п = делать с insertbdd х $ линии S !! 1) [3..9] insertbdd :: Int -> String -> IO () insertbdd _ [] = putStrLn "к" - сопоставление с образцом, который не работает insertbdd нг Xs = у подключ [[а]] ngrams п = взятие (длина L - (п - 1)). карта (взять п). хвосты $ л, что остановить с этим сообщением *** Исключение: SQLERROR {seState = "", seNativeError = -1, seErrorMsg = "В HDBC выполнение, полученный [], но ожидается, 1 арг".} Я wroted много шаблона, который не матч. Любая идея, почему это происходит?
Ophidia
1

голосов
1

ответ
57

Просмотры

Interacting with Google Authenticator Using Cryptonite

Я пытаюсь создать TOTPs такие, что я могу сделать использование приложения Google Authenticator. Я использую библиотеку Cryptonite, которая обеспечивает функциональность TOTP. В моем понимании, Google Authenticator требует ключ в base32. Она также требует = отступы удаляются. Cryptonite обеспечивает unpad функцию, но я не очень понимаю, как это работает, и как таковой не может понять, что первый аргумент должен быть, все, что я пытался не делает функцию возврата ничего. Для тестирования я выбрал ключ, который не будет иметь никаких отступов, однако, коды, сгенерированные мою программа не совпадает, генерируемый Google Authenticator. Ключ Base32 производства кода заключается в следующем: GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ Ввод это в Google Authenticator не дает те же результаты, как мой код производит. Вот мой код:
James Burton
1

голосов
1

ответ
175

Просмотры

How to have type reflection in Haskell

Я написал простой сервер Йесода Rest, сохраняющиеся объекты в JSON-файлах. Объекты хранятся на диске в файлах, названных данных / type.id.json. Например retrieveCustomer «1234» необходимо загрузить данные из файла данных / Customer.1234.json. Я использую полиморфную функцию retrieveEntity, которые могут извлекать экземпляры любого типа данных, создание экземпляра класса типов FromJSON. (Эта часть работает хорошо) Но на данный момент я должен заполнить имя типа HARDCODED в функциях типоспецифичного как retrieveCustomer. Как мне удается вычислить имя типа динамически в родовом retrieveEntity? Я думаю, что я в основном ищу Haskell механизм типа отражения, который я не сталкивался до сих пор? - | извлечения клиента по идентификатору retrieveCustomer :: Текст -> IO Customer retrieveCustomer ID = делать retrieveEntity "Клиент" ид :: IO Заказчик - | загрузить постоянный объект типа Т и определены по идентификатору из серверной retrieveEntity :: (FromJSON а) => String -> Текст -> IO retrieveEntity T ID = сделать пусть jsonFileName = GetPath T ID ".json" parseFromJsonFile jsonFileName :: FromJSON а => IO а - | вычислить путь файла данных GetPath :: String -> Текст -> String -> Строка GetPath T ID Ei = "Данные /" ++ т ++ "" ++ распаковывать ID ++ экс - | читать из файла FileName, а затем разобрать содержимое как экземпляр FromJSON. parseFromJsonFile :: FromJSON а => FilePath -> IO parseFromJsonFile имя_файла = у contentBytes неудачу тзд правой х -> х вернуться IO retrieveEntity T ID = дайте jsonFileName = GetPath T ID ".json" parseFromJsonFile jsonFileName :: FromJSON а => IO а - | вычислить путь файла данных GetPath :: String -> Текст -> String -> Строка GetPath T ID Ei = "Данные /" ++ т ++ "" ++ распаковывать ID ++ экс - | читать из файла FileName, а затем разобрать содержимое как экземпляр FromJSON. parseFromJsonFile :: FromJSON а => FilePath -> IO parseFromJsonFile имя_файла = у contentBytes неудачу тзд правой х -> х вернуться IO retrieveEntity T ID = дайте jsonFileName = GetPath T ID ".json" parseFromJsonFile jsonFileName :: FromJSON а => IO а - | вычислить путь файла данных GetPath :: String -> Текст -> String -> Строка GetPath T ID Ei = "Данные /" ++ т ++ "" ++ распаковывать ID ++ экс - | читать из файла FileName, а затем разобрать содержимое как экземпляр FromJSON. parseFromJsonFile :: FromJSON а => FilePath -> IO parseFromJsonFile имя_файла = у contentBytes неудачу тзд правой х -> х вернуться ++ распаковывать ID ++ экс - | читать из файла FileName, а затем разобрать содержимое как экземпляр FromJSON. parseFromJsonFile :: FromJSON а => FilePath -> IO parseFromJsonFile имя_файла = у contentBytes неудачу тзд правой х -> х вернуться ++ распаковывать ID ++ экс - | читать из файла FileName, а затем разобрать содержимое как экземпляр FromJSON. parseFromJsonFile :: FromJSON а => FilePath -> IO parseFromJsonFile имя_файла = у contentBytes неудачу тзд правой х -> х вернуться
Thomas Mahler
1

голосов
0

ответ
102

Просмотры

Узор синонимов, происходящий читать?

Шаблон синонимы обеспечивают сокращенный способ выразить значение; Кроме того, они могут обеспечить абстрактное имя, чтобы избежать клиентского модуля на разрыв в ДЕЦЛ данных. Вот не очень полезный, в качестве примера для обсуждения: данные тупит = MkNum Int модели Нулевой :: тупит модель Нулевой = 0 MkNum Что я могу сделать, чтобы помочь сбору данных является обеспечить экземпляр для чтения тупит. Как я могу получить экземпляр для чтения нуля? (Ноль конструктор псевдо-данных, а не конструктор типа, так что вопрос делает ошибку категории.) Все, что я могу думать о том, чтобы избежать вывода (чтение, ...) для тупит, а затем вручную суда экземпляра Read тупит где ... разобрать «MkNum ...» ... разобрать «Zero» для разбора, ноль должен быть просто еще один конструктор тупит. Это может быть получено - или может? Я не думаю, что какой-либо из продвинутых механизмов, вытекающих бы помочь здесь. Поскольку тип тупит и единственный связанный конструктор т.е. MkNum. Я мог бы привести функцию readZero :: String -> тупит. Но я не могу перегрузить читать, поэтому я не могу вставлять Ноль внутри длинной строки буквальной, что я читаю, чтобы сделать структуру данных. Есть идеи?
AntC
1

голосов
0

ответ
54

Просмотры

Снижение ограничений класса в Haskell и проверки постоянных таблиц

Я пытаюсь настроить базовую конечную точку, которая принимает идентификатор и идет через присоединиться к столу, чтобы вернуть все присоединился к записи, используя постоянные и Спок, рабочая реализация выглядит следующим образом. получить ( "песни" вар) $ \ ID -> сделать песню Key а -> т (Entity а) getRecord404 к = не делать Рез Может быть (Entity а) -> ActionCtxT CTX м (Entity а) guardNotFound Nothing = делать setStatus status404 текст " Не найдено»guardNotFound (Просто) = вернуть Вопрос 1: есть ли ограничения класса должны быть настолько велики, эти функции? Похоже, пытаясь сочинить эти монады бы получить утомительно быстро с таким количеством ограничений. Я видел, что я могу использовать Constraint Виды для установки ограничений синонимов, но я чувствую, что, может быть, я делаю что-то неправильно нужно так много ограничений. Я также хотел бы видеть, если я мог бы написать более общий метод для выполнения операции соединения. Предположительно это будет достаточно информации, чтобы иметь тип входа, а таблица используется для объединения, то может компилятор может определить тип вывода и (по крайней мере, в таком языке, как рубин) вы могли бы проверить присоединиться тип таблицы, чтобы найти соответствующие столбцы присоединиться на. Что-то вроде: manyThrough :: (Монада м ...) => Key а -> [Как-то передать информацию о том, какие таблицы использовать] -> м [Entity B] Попытка реализовать такую ​​функцию вне меня, хотя. Я не уверен, что это лучший способ, чтобы передать информацию о том, какие таблицы использовать для соединения. Я реализовал версию, которая проходит столбцы явно (ниже), который работает, но он снова имеет огромное ограничение класса, и занимает большую сигнатуру метода, чем я хотел. Есть ли способ, чтобы добиться чего-то вроде подписи выше? manyThrough :: (PersistEntity t1, t2 PersistEntity, PersistField (Key б), PersistField (Key а), PersistEntityBackend t1 ~ SqlBackend, PersistEntityBackend t2 ~ SqlBackend, SpockConn м ~ SqlBackend, tyP2 ~ Key б, tyP1 ~ Key а, HasSpock м, SQLSelect (SqlExpr (Entity t2)) (Entity б)) => tyP1 -> EntityField t1 tyP1 -> EntityField t1 tyP2 -> EntityField t2 tyP2 -> м [Entity б] manyThrough ключ joinId1 joinId2 targetId = runSQL $ выберите $ из $ \ (joinTable `цель InnerJoin`) -> делать на (... joinTable ^ joinId2 == мишени ^ targetId) where_ (joinTable ^ joinId1 == Вэл (ключ)..) возвращение (цель)
SJH
1

голосов
0

ответ
189

Просмотры

Haskell функциональных зависимостей Консистенция Состояние: он нужен? Используется ли это?

FunDep Консистенция Состояние появляется во всей литературе, начиная с Mark P Jones 2000 бумаги. И это унаследовали от базы данных теории происхождения FunDeps. Но FunDeps Хаскеля не очень много, как в базах данных: а FunDep -> означает: в любом случае для этого класса, я обещаю дать алгоритм, чтобы получить от параметров класса слева для тех, кто справа. (В том случае, ДЕЦЛ, что алгоритм, возможно, придется идти через свои ограничения - то вам нужно UndecidableInstances). Это достаточно хорошо известно, что реализация GHC, непротиворечивость условия является поддельной - см этого ответа, например. И это хорошая вещь, так что я могу написать класс TypeEq аа»(Ь :: Bool) | аа '-> Ь где ... экземпляр TypeEq аа Правда где ... например (б ~ False) => TypeEq аа' б где ... (Это необходимо OverlappingInstances или прагмы, а также неразрешимый.) Претензия в газетах - в том числе в FunDeps через 2006 ХРЫ бумаги - это то, что Консистенция условие необходимо для обеспечения сливающегося вывода типа. И есть правило вывода, что если вы TypeEq alpha1 бета1 и альфа 2 TypeEq Alpha1 бета2 альфа 2, можно сделать вывод бета1 == бета2, в котором == является тип идентичности не только ~ unifiability. Но я не вижу доказательств GHC никогда не применяет это правило. И ограничение, как это работает просто отлично (EDIT: моя первая подпись здесь была немного в вашем лице, даже для GHC, исправленный): е :: (TypeEq аа «Правда, TypeEq а» Ложное) => а - > а»-> () е _ = () F 'с' 'D' - производит` () `к счастью, сравнимая функция, используя семьи типа может быть определена, но не может быть использована г :: ((а = = б) ~ Ложь, (Б == а) ~ True) => а -> б -> () (Требует TypeOperators, импорт Data.Type.Equality) Для г 'с' 'd' или г 'с' "д" GHC жалуется не мог» т Тип матча «Правда с» Ложь. Тогда это Консистенция состояние ничего, кроме неприятностей? (Там же несколько билетов на Trac, где это произвело очень странное поведение.) Есть ли кто-нибудь полагаться на него? Или использовать его, чтобы проверить их экземпляры в случае неудобных перекрытий? Addit: Вы могли бы подумать, что подпись на е жульничает, щелкая Params типа. Эта подпись (моя первая запись) F :: (TypeEq аа 'Правда, TypeEq аа' False) => а -> а '-> () получает отвергается не мог соответствовать типа' Ложное с «True. Так выглядит GHC применяет вызов-с-же-аргументы правила вывода. Но это с арг, не переворачивается идет нормально f1 :: (TypeEq аа (потому что две подписи слишком далеко?) 'False) => а -> а' -> [()] f1 _ _ = [()] f2 :: (TypeEq аа 'True) => а -> а' -> [()] f2 _ _ = [()] - f3 :: (TypeEq аа 'f2' , TypeEq аа' f1' ) => а -> а»-> [()] f3 х = f1 х ++ f2 х То есть, идет нормально, если я не поставил подпись на f3. (И не важно, что подпись я пытаюсь для f3, отвергает перекрывающиеся экземпляры для «Истинного вытекающего из использования„f2“TypeEq Ab,. Среди других сообщений) [()] F3 х = f1 х ++ f2 х То есть, идет нормально, если я не поставил подпись на f3. (И не важно, что подпись я пытаюсь для f3, отвергает перекрывающиеся экземпляры для «Истинного вытекающего из использования„f2“TypeEq Ab,. Среди других сообщений) [()] F3 х = f1 х ++ f2 х То есть, идет нормально, если я не поставил подпись на f3. (И не важно, что подпись я пытаюсь для f3, отвергает перекрывающиеся экземпляры для «Истинного вытекающего из использования„f2“TypeEq Ab,. Среди других сообщений)
AntC
1

голосов
1

ответ
55

Просмотры

Проверка каждого URL работает в тестах на Йесод сайте

Я пытался проверить, что все ссылки работают на домашней странице сайта Йесод. Я написал этот тест hSpec. Модуль Handler.HomeSpec (спецификации), где импорт Data.Either (fromRight) импорт квалифицирован data.text при Т импорта Network.Wai.Test (simpleBody) импорт TestImport импорта Yesod.Test.TransversingCSS (findAttributeBySelector) getAllLinks :: сайт YesodExample [Текст] getAllLinks = withResponse $ \ разреш -> дайте ссылки = fromRight [] findAttributeBySelector (simpleBody разрешение) "а" "HREF" возвращение $ T.concat ссылка спецификации :: Spec спецификация = withApp $ описывает "Домашнюю страницу" $ это сделать «проверяет все ссылки» $ Действительно получает Homer statusIs 200 ссылки получает Homer statusIs 200 получить Onelink statusIs 200 Все компилируется нормально, но функция прибудет избавляется от принимающей части URL-адресов вы кормите его. Например, когда вы даете ему https://github.com/zigazou/bazasso, он будет пытаться извлечь / zigazou / bazasso, который возвращает 404 код. Есть ли способ, чтобы заставить его работать, как я хочу? Должен ли я добавить функцию, которая удаляет внешние ссылки из тестов? Является ли это просто не место, чтобы сделать это? Есть ли способ, чтобы заставить его работать, как я хочу? Должен ли я добавить функцию, которая удаляет внешние ссылки из тестов? Является ли это просто не место, чтобы сделать это? Есть ли способ, чтобы заставить его работать, как я хочу? Должен ли я добавить функцию, которая удаляет внешние ссылки из тестов? Является ли это просто не место, чтобы сделать это?
zigazou
1

голосов
0

ответ
97

Просмотры

БПМЖ с двумя функциями

Im писать нейронную сеть, используя Haskell. Im основывая свой код на этот http://www-cs-students.stanford.edu/~blynn/haskell/brain.html. Я приспособил метод с прогнозированием следующим образом: Предуправление :: [Float] -> [([Поплавок], [[Float]])] -> [Поплавок] Предуправление = foldl Где previousWeights ((FMAP TANH) previousWeights.). это: previousWeights :: [Float] -> ([Float], [[Float]]) -> [Float] previousWeights actual_value (смещения, веса) = zipWith (+) смещения (карта (сумма (zipWith (*) actual_value. )) вес) Я не очень понимаю, что БПМЖ Тань. Из того, что я прочитал БПМЖ применяется к двум функциям подобна композиции. Если я изменить БПМЖ на карту я получаю тот же результат.
nat
1

голосов
1

ответ
113

Просмотры

`stack build --nix` results in /bin/bash: bad interpreter: No such file or directory

Я предыдущий решить эту проблему, но я не помню, что я сделал ... Так думал, что я отправлю его здесь, чтобы уладить. Я пытаюсь построить пакет Haskell с стека сборки Никс, я после ответа от https://stackoverflow.com/a/47110522/1663462, но он работает в ошибку: Распаковка GHC в / главная / Крисом / .stack / программа / x86_64-linuRunning /home/chris/.stack/programs/x86_64-linux-nix/ghc-8.0.2.temp/ghc-8.0.2/configure prefix = / дом / Крис / .stack /programs/x86_64-linux-nix/ghc-8.0.2/ в директории /home/chris/.stack/programs/x86_64-linux-nix/ghc-8.0.2.temp/ghc-8.0.2/ вышла с ExitFailure 1 проверка на пути к вершине построения дерева ... /home/chris/.stack/programs/x86_64-linux-nix/ghc-8.0.2.temp/ghc-8.0.2/configure: Utils / GHC-PWD / расстояние-установки / сборки / TMP / GHC-PWD-bindist: / Бен / Баш: плохой переводчик: Нет такого файла или каталога настроить: ошибка: не может определить текущий каталог Как я могу решить эту проблему? стек --nix результатов настройки в: Подготовка к установке GHC в изолированном месте. Это не будет мешать любой установки на системном уровне. Уже скачал. Запуск /home/chris/.stack/programs/x86_64-linux-nix/ghc-8.0.2.temp/ghc-8.0.2/configure prefix = / дом / CHRIS / .stack / программы / x86_64-linux- Никс / GHC-8.0.2 / в директории /home/chris/.stack/programs/x86_64-linux-nix/ghc-8.0.2.temp/ghc-8.0.2/ вышла с ExitFailure 1 проверки на пути к вершине построить дерево ... /home/chris/.stack/programs/x86_64-linux-nix/ghc-8.0.2.temp/ghc-8.0.2/configure: Utils / GHC-PWD / расстояние-установки / сборки / TMP / GHC-PWD-bindist: / бен / Баш: плохой переводчик: Нет такого файла или каталога настроить: ошибка:
Chris Stryczynski
1

голосов
0

ответ
62

Просмотры

Слуга потребляя CSV API

Я нашел прохождение игры: https://www.youtube.com/watch?v=TQB2JbxNEUI и хотел дать ему уйти. Я обнаружил, однако, что мой API возвращает данные в формате CSV, а не JSON. Что бы альтернативная реализация для этой части кода? Экземпляр FromJSON GuardianResponse где parseJSON = withObject "ответ" $ \ о -> делать г
Alojzy Leszcz
1

голосов
0

ответ
54

Просмотры

Какова частота LTSS в дикой природе?

У меня есть пакет Haskell, который я хотел (для того, чтобы упростить и стабилизировать мои сборки), чтобы ограничить до самых последних версий Stackage LTS, что требует любого, используя старую LTS, и, таким образом, старше GHC, чтобы использовать более старую версию моего пакета , В настоящее время мой пакет поддерживает GHC 8,4 через 7.10 (через LTS 6.35, 7.24, 9.21, 9.6, 10.3, 11.22 и 12.10), но если я сделаю это изменение, которое я буду ограничен до 8,4 (или, возможно, немного раньше, в зависимости от того, что я цели) и LTS после 10.3. Какова частота LTS (или GHC версии) использование в дикой природе? Есть старые версии широко используются или используются в конкретных приложениях или контекстах?
orome
1

голосов
1

ответ
53

Просмотры

Встраивание функции в исходном коде Haskell

Есть ли способ для получения исходного файла Haskell с встраиваемыми определениями из существующего источника Haskell файла? В частности, я заинтересован в принятии что-то вроде следующего: класс C а где Foo :: а -> экземпляр C Bool, где Foo = не бар :: Bool -> Bool бар х = Foo (Foo х) и удаление ссылки класс типов, чтобы произвести это: бар :: Bool -> Bool бар х = нет (не х)
user4614475
1

голосов
1

ответ
35

Просмотры

doctest QuickCheck - я могу импортировать экземпляры КК только в doctests?

Я использую doctest, и как то, что я могу проверить, не экспортируемые функции, откуда они определены: модуль Foo (frobnicate) где - | - >>> randomInt = 42 - Правда randomInt :: Int randomInt = 42 Я до сих пор хранятся экземпляры QuickCheck в тест-набора, так что библиотека не зависит от тестирования пакетов, но это означает, что я не могу запустить QuickCheck от doctests. Я могу, конечно, не использовать doctest и запустить QC из тест-набора, но тогда я должен экспортировать каждую функцию, которую я хочу проверить. Есть ли способ иметь doctests, которые используют экземпляры QC без главной библиотеки зависят от QC, (и без переписывания экземпляров в doctest «REPL»)?
unhammer
1

голосов
0

ответ
60

Просмотры

Haskell - fileManip найти - игнорирование каталогов при рекурсивном поиске не работает

Я пытаюсь использовать функцию FilePath.Find из FileManip игнорировать рекурсию на определенные каталоги. Например, я хочу, чтобы игнорировать каталоги заканчиваясь в тесте, или игнорировать .git и т.д. Пример: дайте мне все файлы, которые не в стеке работы директории или импорта System.Directory импорта System.Environment импорта System.FilePath.Find импорта системы веб-дир .FilePath.GlobPattern импортировать квалифицированную Data.List, как L импорт Control.Monad notIsSuffixOf :: [Char] -> [Char] -> Bool notIsSuffixOf AB = нет (L.isSuffixOf AB) неимущий :: FindClause Bool неимущие = (\ d - > notIsSuffixOf "веб" г || notIsSuffixOf "стек работы" d) `findAllNots каталога liftM` :: FilePath -> IO [FilePath] findAllNots путь = найти неимущими (FILETYPE == RegularFile) путь Но это, безусловно, не обращая внимания на веб? или стека рабочих каталогов. Я' ве нарушающие покой мой мозг на это, но не могу показаться, чтобы выяснить это. Выполнение их в изоляции, кажется, не надежно работать либо (делать только стек работы работы, но «паутина» по-прежнему соответствует /blah/web/jds.txt, например. Если бы я изменить его isSuffixOf Я соответствую ни на чем, что также обескураживает. Читая http://hackage.haskell.org/package/filemanip-0.3.6.3/docs/System-FilePath-Find.html указывает, что это должно работать, см верхний пример, когда (isInfixOf «темп») `liftM `каталог соответствует любому каталогу с темп
mat4nier
1

голосов
1

ответ
62

Просмотры

Вызов функции с определяемыми пользователем типами данных в Haskell

Я определил тип данных в Haskell списке данных = Nil | Cons а (список а) я написал функцию, используя этот тип данных listLength Nil = 0 listLength (Cons х хз) = 1 + listLength (хз) я попытался вызвать эту функцию дает аргументы как этот listLength (против 2 [2,3]) Но я получил сообщение об ошибке:: 68: 20: ошибка: * не удалось соответствовать ожидаемого типа `Список Integer 'с фактическим типом` [Integer] * Во втором аргумент `Против, а именно` [2, 3] 'В первый аргумент `listLength', а именно` (против 2 [2, 3])»в выражении: listLength (против 2 [2, 3]) Как зовите эту функцию?
Nishara Kavindi
1

голосов
0

ответ
81

Просмотры

Cabal unexpected behaviour when upgrading

Рамиро @ OMFG-привет: ~ $ междусобойчик --version междусобойчик установить версию 1.24.0.2 скомпилирован с использованием версии 1.24.2.0 из библиотеки Рамиро Кабал @ OMFG-привет: ~ $ Sudo междусобойчика установить междусобойчик установить --force-повторные [Судо ] пароль для Рамиро: Разрешение зависимостей ... Настройка Кабал-установка-2.4.0.0 ... Строительство заговорщиков-установка-2.4.0.0 ... Установленные заговорщики-установка-2.4.0.0 Рамиро @ OMFG-привет: ~ $ заговорщиков - -версия междусобойчик установить версию 1.24.0.2 скомпилированы с использованием версии 1.24.2.0 библиотеки Кабал Действительно я не ожидал что-то вроде этого. Я ошеломлен. Edit: Фиксированный с @duplode комментарий Дальнейшее редактирование: Кто-нибудь знает, почему я все еще получаю это? Рамиро @ OMFG-привет: ~ / Haskell / happstack-сервер $ Sudo междусобойчик новый тест все заговорщики: непризнанный команда: новый тест (попробуйте --help) По крайней мере я получить правильную версию Кабал Теперь Рамиро @ OMFG-привет:
user3927886
1

голосов
1

ответ
56

Просмотры

Йесод приложение на Кетер с только для чтения доступа к БД

У меня есть пара Йесод приложения, развернутые с помощью Кетер с PostgreSQL. То, что я действительно люблю о них является автоматической миграцией БД, что происходит на развертывании. Но теперь я столкнулся с небольшой проблемой: я создал БД реплики на другой виртуальной машине; вторая БД ведомое устройство и, таким образом, только для чтения. Когда я начинаю Кетер с развертываются мои приложения, приложения не могут начаться, потому что они не могут успешно выполнить миграцию сценария. Есть только фиктивные изменения, не реальное изменение таблицы, но приложение не запускается с «не может выполнить ALTER TABLE в транзакции только для чтения». Можно ли временно отключить миграции скриптов при запуске через Кетер или приложение конфиги или ENV переменные?
artem
1

голосов
1

ответ
65

Просмотры

Функции Перегрузки

Я работаю над моим заданием на Funtional программирования. Задача: Введем в NewTypeClass класс типов для того, чтобы изменить поведение функции F от перегрузки функции F для различных типов. Задано: класс (формула а, Ord а, Покажите, Num а) => NewTypeClass а, где е :: а -> а, где е является факторной функцией: п | п == 0 = 1 | elseways = п * е (п-1), где elseways = True Один из типов Int. Я должен сделать тип Int экземпляр класса типов NewTypeClass так, что если я дам аргумент функции Р возвращает результат следующим образом: F 5 - >> Ошибка: Нерешенные перегрузкой е (5 :: Int) - >> 120 F (-5: : Int) - >> ... - >> ... Non регулярное прекращение. Что я сделал: Экземпляр NewTypeClass Int где п | п == 0 = 1 | elseways = п * е (п-1), где elseways = True Мои результаты: * Main> F 5 120 * Main> е (5 :: Int) 120 * Main> е (-5 :: Int) *** Исключение: переполнению стека Так, когда я звоню е 5 получить обратно результат 120, что означает, что я не перегрузить функцию F правильно. Разве я не понимаю, что-то правильно или я делаю ошибку где-то в моем коде? Edit: * Main>: набор + т * Main> е 5 120 это :: NewTypeClass а => а * Main> е (5 :: Int) 120 это :: Int * Main> е (-5 :: Int) * ** Исключение: переполнение стека Разве я не понимаю, что-то правильно или я делаю ошибку где-то в моем коде? Edit: * Main>: набор + т * Main> е 5 120 это :: NewTypeClass а => а * Main> е (5 :: Int) 120 это :: Int * Main> е (-5 :: Int) * ** Исключение: переполнение стека Разве я не понимаю, что-то правильно или я делаю ошибку где-то в моем коде? Edit: * Main>: набор + т * Main> е 5 120 это :: NewTypeClass а => а * Main> е (5 :: Int) 120 это :: Int * Main> е (-5 :: Int) * ** Исключение: переполнение стека
cheshire
1

голосов
1

ответ
54

Просмотры

Синтаксический JSON к карте Строка Строка с эсон

Я пытаюсь разобрать JSON из API со структурой данных, например, { «ан»: { «перевод»: { «имя»: «Имя», «описание»: [ «Я», «ан человека»]} }, «JP»: { «перевод»: { «имя»: «JP имя», «описание»: [ «я», «JP человек»]}}} Таким образом, я просто хочу, чтобы разобрать их на что-то как NewType Translations = Map String String. локалите будет иметь ключевое имя и значение будет только строкой JSON перевода, как { «имя»: «Имя», «Описание»: [ «Я», еп человека "]}, так как значение может быть сколь угодно сложным и Я серовато уход / нужно, чтобы преобразовать его в другую структуру данных Haskell. Я пытался так много способов, чтобы написать правильный parseJSON для перевода, но все еще не могу сделать это. Любая помощь будет оценен по достоинству!
bruteforcecat
1

голосов
0

ответ
73

Просмотры

SizeOf, offsetof, и выравнивание с помощью TemplateHaskell

Интересно, если кто-то реализовали аналоги hsc2hs прагм через TemplateHaskell? Он чувствует, как это должно быть выполнимо, так как TH работает на целевой платформе во время компиляции, и GHC всегда есть C компилятор валяется. Это может быть полезным в качестве другого способа генерации Haskell оберток для структур C и получают материал для них. Возникает вопрос: если есть такая библиотека, указать мне, пожалуйста. В противном случае, скажите мне, если я что-то пропустил, и это невозможно или не имеет смысла.
artem
1

голосов
1

ответ
63

Просмотры

ghcid на одном файле

Можно ли использовать ghcid на один файл, с контекстом пакета, предоставленным с помощью командной строки, вроде как: стек runghc --resolver LTS-12,20 --package иссиня-Haskell-0.1.2.0 myfile.hs
nicolas

Просмотр дополнительных вопросов

Связанные вопросы