Вопросы с тегом «ghc»

Glasgow Haskell Compiler - это современный компилятор с открытым исходным кодом и интерактивная среда для функционального языка Haskell. Используйте этот тег для вопросов конкретно о GHC, а не о Haskell в целом, поскольку почти все будут использовать его, если не указано иное.

392
Транзитивность авто-специализации в GHC

Из документов для GHC 7.6: [Y] Вам часто даже не нужна прагма SPECIALIZE. При компиляции модуля M оптимизатор GHC (с -O) автоматически рассматривает каждую перегруженную функцию верхнего уровня, объявленную в M, и специализирует ее для различных типов, в которых она вызывается в M. Оптимизатор...

322
Методы отслеживания ограничений

Вот сценарий: я написал некоторый код с сигнатурой типа, и жалобы GHC не смогли вывести x ~ y для некоторых xи y. Обычно вы можете бросить GHC кость и просто добавить изоморфизм в ограничения функции, но это плохая идея по нескольким причинам: Это не подчеркивает понимание кода. Вы можете получить...

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

Я начинаю понимать, как forallключевое слово используется в так называемых «экзистенциальных типах», например: data ShowBox = forall s. Show s => SB s Однако это только часть того, как forallэто используется, и я просто не могу сосредоточиться на его использовании в таких вещах: runST :: forall...

247
Почему Haskell (GHC) так чертовски быстр?

Haskell (с GHCкомпилятором) работает намного быстрее, чем вы ожидаете . При правильном использовании он может приблизиться к языкам низкого уровня. (Любимая вещь для Haskellers - попытаться получить в пределах 5% от C (или даже побить его, но это означает, что вы используете неэффективную программу...

212
Когда -XAllowAmbiguousTypes подходит?

Недавно я опубликовал вопрос о синтаксической версии 2.0 относительно определения share. У меня было это работает в GHC 7.6 : {-# LANGUAGE GADTs, TypeOperators, FlexibleContexts #-} import Data.Syntactic import Data.Syntactic.Sugar.BindingT data Let a where Let :: Let (a :-> (a -> b) :->...

193
Чтение GHC Core

Ядро является промежуточным языком GHC. Чтение Core может помочь вам лучше понять производительность вашей программы. Кто-то попросил у меня документацию или учебные пособия по чтению Core, но я не мог найти много. Какая документация доступна для чтения GHC Core? Вот что я нашел до сих пор: Пишите...

183
Какую оптимизацию можно ожидать от GHC?

У GHC есть много оптимизаций, которые он может выполнить, но я не знаю, чем они все являются, и какова вероятность их выполнения и при каких обстоятельствах. Мой вопрос: какие преобразования я могу ожидать, чтобы они применялись каждый раз или почти так? Если я смотрю на фрагмент кода, который...

156
Специализация с ограничениями

У меня проблемы с получением GHC, чтобы специализировать функцию с ограничением класса. У меня есть минимальный пример моей проблемы здесь: Foo.hs и Main.hs . Два файла компилируются (GHC 7.6.2, ghc -O3 Main) и запускаются. ПРИМЕЧАНИЕ: Foo.hs действительно урезано. Если вы хотите понять, зачем...

147
Почему GHC такой большой / большой?

Есть простой ответ: почему GHC такой большой? OCaml: 2 МБ Python: 15 МБ SBCL: 9 МБ OpenJRE - 26 МБ GHC: 113 МБ Не интересуется евангелизацией «Почему меня не волнует размер, если Haskell - правильный инструмент»; это технический...

143
GHC-мод должен использовать полные имена для типов?

Я пытаюсь использовать ghc-modплагин vim для проверки типа / синтаксиса и т. Д. Однако я обнаружил, что ghc-modв сообщениях об ошибках всегда используются полные пути типов, например: test.hs|71 col 13 error| Couldn't match type ‘Data.Text.Internal.Text’ || with ‘[GHC.Types.Char]’ || Expected type:...

130
Сокращение времени паузы при сборке мусора в программе на Haskell

Мы разрабатываем программу, которая принимает и пересылает «сообщения», сохраняя при этом временную историю этих сообщений, чтобы она могла рассказать вам историю сообщений по запросу. Сообщения идентифицируются численно, обычно имеют размер около 1 килобайта, и нам необходимо хранить сотни тысяч...

127
Маленькая программа на Haskell, скомпилированная с помощью GHC, в огромный двоичный файл

Даже тривиально маленькие программы на Haskell превращаются в гигантские исполняемые файлы. Я написал небольшую программу, которая была скомпилирована (с помощью GHC) в двоичный файл размером более 7 МБ! Что может заставить даже небольшую программу на Haskell компилироваться в огромный двоичный...

124
Объем памяти типов данных Haskell

Как я могу найти фактический объем памяти, необходимый для хранения значения некоторого типа данных в Haskell (в основном с GHC)? Можно ли оценить его во время выполнения (например, в GHCi) или можно оценить потребности в памяти для составного типа данных по его компонентам? В общем, если...

112
Почему функция Haskell «ничего не делает», id, потребляет тонны памяти?

В Haskell есть функция идентификации, которая возвращает входные данные без изменений. Определение простое: id :: a -> a id x = x Итак, для удовольствия, это должно вывести 8: f = id id id id id id id id id id id id id id id id id id id id id id id id id id id main = print $ f 8 Через несколько...

106
Когда мемоизация выполняется автоматически в GHC Haskell?

Я не могу понять, почему m1, по-видимому, мемоизирован, а m2 отсутствует в следующем: m1 = ((filter odd [1..]) !!) m2 n = ((filter odd [1..]) !! n) m1 10000000 занимает около 1,5 секунд при первом вызове и небольшую часть этого времени при последующих вызовах (предположительно, он кэширует список),...

103
Есть ли способ заставить GHC обеспечивать ограничения классов типов для типизированных отверстий?

Текущее поведение Prelude> show _ <interactive>:7:6: Found hole ‘_’ with type: a0 Where: ‘a0’ is an ambiguous type variable Relevant bindings include it :: String (bound at <interactive>:7:1) In the first argument of ‘show’, namely ‘_’ In the expression: show _ In an equation for...

87
Почему этот код Haskell работает медленнее с -O?

Этот фрагмент кода Haskell работает намного медленнее -O, но не -Oдолжен быть опасным . Кто-нибудь может сказать мне, что случилось? Если это важно, то это попытка решить эту проблему , и она использует двоичный поиск и постоянное дерево сегментов: import Control.Monad import Data.Array data Node...

86
Осиротевшие экземпляры в Haskell

При компиляции моего приложения Haskell с -Wallопцией GHC жалуется на потерянные экземпляры, например: Publisher.hs:45:9: Warning: orphan instance: instance ToSElem Result Класс типа ToSElemне мой, он определен HStringTemplate . Теперь я знаю, как это исправить (переместить объявление экземпляра в...

84
Как читать это «доказательство» GHC Core?

Я написал этот небольшой фрагмент Haskell, чтобы выяснить, как GHC доказывает, что для натуральных чисел вы можете уменьшить вдвое только четные: {-# LANGUAGE DataKinds, GADTs, KindSignatures, TypeFamilies #-} module Nat where data Nat = Z | S Nat data Parity = Even | Odd type family Flip (x ::...