标签: ghc

为 ghc 编译器指定自定义临时目录

我在运行 Ubuntu 14.04 LTS 的 Web 服务器上使用 ghc。由于某些限制,我无法提供对 /tmp 文件夹的写入权限。

删除对 /tmp 文件夹的权限后,ghc 编译器抛出此错误

/tmp/ghc12032_0: createDirectory: permission denied (Permission denied)
Run Code Online (Sandbox Code Playgroud)

有没有办法为 ghc 提供自定义临时目录?我没有找到任何可以帮助解决这个问题的编译器标志。每次调用 ghc 时,我都需要提供一个自定义目录。任何帮助,将不胜感激。

haskell ghc

1
推荐指数
1
解决办法
173
查看次数

如何判断 GHC 中是否发生了公共子表达式消除?

假设我有一个像这样的天真实现的功能:

quadratic a b c = (ans1, ans2)
  where
    ans1 = ((-b) + sqrt (b * b - 4 * a * c)) / (2 * a)
    ans2 = ((-b) - sqrt (b * b - 4 * a * c)) / (2 * a)
Run Code Online (Sandbox Code Playgroud)

有多个相同的子表达式。我如何在不阅读核心的情况下判断是否正在发生公共子表达式消除以及其中的哪些部分?

haskell ghc compiler-optimization

1
推荐指数
1
解决办法
227
查看次数

“readPrec”不是“Read”类的(可见)方法

文档建议ReadPrec是解析器的更有效的表示,而不是ReadS说它是 ghc 用来定义派生Read实例的表示。但是,当我尝试Read使用它实现 a 时,ghc 给出了该方法不可见的错误。

instance Read PosTag where
   readPrec = mconcat . map posTagFromChar <$> lift (many (satisfy (`elem` "nva")))
Run Code Online (Sandbox Code Playgroud)

http://hackage.haskell.org/package/base-4.12.0.0/docs/Text-Read.html

haskell ghc

1
推荐指数
1
解决办法
523
查看次数

Haskell:打印函数内变量的类型

如何在 .hs 文件中的函数中打印变量的类型?

从ghci,我可以做到:type var。我该如何做类似以下的事情:

sumList :: [Int] -> Int
sumList [] = 0
sumList (h:t) = traceShow (type h) $ h : sumList t
Run Code Online (Sandbox Code Playgroud)

哪个会在每次递归迭代时打印类似 h::Int 的内容?

haskell functional-programming ghc ghci

1
推荐指数
1
解决办法
63
查看次数

安装 haskell 平台时设备中没有空间错误

尝试使用安装 Haskell patform

curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
Run Code Online (Sandbox Code Playgroud)

显示此类错误:

欢迎来到哈斯克尔!

该脚本将下载并安装以下二进制文件: * ghcup - Haskell 工具链安装程序(用于管理 GHC/cabal 版本) * ghc - Glasgow Haskell 编译器 * cabal - Cabal 构建工具

ghcup 仅安装到以下目录中,该目录可以随时删除:/home/welcome/.ghcup

按 ENTER 继续或按 ctrl-c 中止。请注意,该脚本可以在任何给定时间重新运行。

% 总计 % 接收 % Xferd 平均速度 时间 时间 时间 当前 Dload 上传总花费左速度 100 20.2M 100 20.2M 0 0 2302k 0 0:00:08 0:00:08 --:--:-- 2899k [ 信息 ]正在升级 GHCup... [ 警告 ] 没有可用的 GHCup 更新

系统要求 注意:您需要以下软件包:curl g++ gcc gmp make …

linux haskell ghc solus

1
推荐指数
1
解决办法
1104
查看次数

解释 GHC 堆配置文件中的悬崖边缘

我需要一些帮助来理解一些 GHC 堆配置文件。我正在为语法框架语言的现有编译器开发一种新的输出格式。

分析当前版本编译器的正常运行如下所示:

PGF 的堆配置文件

  13,347,660,488 bytes allocated in the heap
 213,062,924,208 bytes copied during GC
     740,585,528 bytes maximum residency (567 sample(s))
       4,844,112 bytes maximum slop
            1438 MiB total memory in use (0 MB lost due to fragmentation)

                                     Tot time (elapsed)  Avg pause  Max pause
  Gen  0     12312 colls,     0 par    1.321s   1.382s     0.0001s    0.0025s
  Gen  1       567 colls,     0 par   206.442s  208.534s     0.3678s    0.8388s

  INIT    time    0.001s  (  0.005s elapsed)
  MUT     time   68.757s  ( 68.986s elapsed)
  GC …
Run Code Online (Sandbox Code Playgroud)

profiling haskell ghc gf

1
推荐指数
1
解决办法
54
查看次数

GADT 的非穷举模式

我想编写一个函数,用 GADT 样式定义的数据结构将正则 lambda 表达式转换为 DeBrujin 样式。

{-# Language GADTs, StandaloneDeriving,ScopedTypeVariables #-}

module DeBrujin where

import Debug.Trace
import Data.List as L

data Apply
data Abstract
data Variable

data LambdaTerm a where
  Var :: String -> LambdaTerm Variable
  Abs :: String -> LambdaTerm a -> LambdaTerm Abstract
  App :: LambdaTerm Abstract -> LambdaTerm a -> LambdaTerm Apply

instance Show (LambdaTerm a) where
  show (Var v) = v
  show (Abs s t) = "?" ++ s ++ "." ++ show t
  show …
Run Code Online (Sandbox Code Playgroud)

haskell ghc gadt

1
推荐指数
1
解决办法
71
查看次数

Haskell 中的值被丢弃

我不明白为什么会发生这种情况:

module Main where

import Control.Monad.Reader

data Config = Config Int

getA :: (Monad m) => ReaderT Config m Int
getA = do
  Config a <- ask
  return a

readConfig :: Config -> IO Int
readConfig = runReaderT getA

main :: IO ()
main = do
  print "Start"
  let a = Config 2
  b <- readConfig a -- Will be printed
  print b
  let c = Config 4
  print <$> readConfig c -- Silence, nobody complains..
  print "Done"
Run Code Online (Sandbox Code Playgroud)

结果就是:

"Start" …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

1
推荐指数
1
解决办法
143
查看次数

我可以在 Haskell 中将数字限制为全局小数点后 3 位吗?

我有一个生成 SVG 代码(图像和图标)的包

但是,生成的 svg 代码太大,因为所有数字都有很多小数位。

是否有语言杂注或类似的东西可以限制所有数字只有 3 位十进制数字?

我想用一些最少的代码来完成此操作,我不想将某些函数Float单独应用于每个数字。

haskell numbers ghc

1
推荐指数
1
解决办法
219
查看次数

GHC 8.8.4 无法建议添加 hashable,即使它已经添加

我编写了一个程序,利用库Hashset中的unordered-containers。它在我的 GHC 9.2.4 计算机上运行良好。由于某些原因,我正尝试将其移植到标题中提到的 GHC 8.8.4。它主要归结为添加一些语言扩展。

\n

不过我遇到了一个奇怪的问题。

\n

我有一个功能powerset :: Hashable a => Set a -> [Set a]

\n

编译时我收到以下错误:

\n
Could not deduce (hashable-1.3.0.0:Data.Hashable.Class.Hashable\n                          a)\n        arising from a use of \xe2\x80\x98makeSubset\xe2\x80\x99\n      from the context: Hashable a\n        bound by the type signature for:\n                   powerset :: forall a. Hashable a => Set a -> [Set a]\n        at Automaton.hs:48:1-45\n      Possible fix:\n        add (hashable-1.3.0.0:Data.Hashable.Class.Hashable\n               a) to the context of\n          the type signature for:\n            powerset :: forall …
Run Code Online (Sandbox Code Playgroud)

haskell ghc cabal

1
推荐指数
1
解决办法
78
查看次数