我在运行 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 时,我都需要提供一个自定义目录。任何帮助,将不胜感激。
假设我有一个像这样的天真实现的功能:
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)
有多个相同的子表达式。我如何在不阅读核心的情况下判断是否正在发生公共子表达式消除以及其中的哪些部分?
文档建议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
如何在 .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 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 …
我需要一些帮助来理解一些 GHC 堆配置文件。我正在为语法框架语言的现有编译器开发一种新的输出格式。
分析当前版本编译器的正常运行如下所示:
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) 我想编写一个函数,用 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) 我不明白为什么会发生这种情况:
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) 我有一个生成 SVG 代码(图像和图标)的包
但是,生成的 svg 代码太大,因为所有数字都有很多小数位。
是否有语言杂注或类似的东西可以限制所有数字只有 3 位十进制数字?
我想用一些最少的代码来完成此操作,我不想将某些函数Float单独应用于每个数字。
我编写了一个程序,利用库Hashset中的unordered-containers。它在我的 GHC 9.2.4 计算机上运行良好。由于某些原因,我正尝试将其移植到标题中提到的 GHC 8.8.4。它主要归结为添加一些语言扩展。
不过我遇到了一个奇怪的问题。
\n我有一个功能powerset :: Hashable a => Set a -> [Set a]。
编译时我收到以下错误:
\nCould 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)