Questions tagged «ghc»

格拉斯哥Haskell编译器是功能语言Haskell的最先进的开源编译器和交互式环境。将此标签用于专门针对GHC而不是有关Haskell的问题,因为除非另有说明,否则几乎每个人都将使用它。

3
有没有办法使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 ‘it’: it = show _ 期望的行为 …
103 haskell  types  ghc 

1
为什么此Haskell代码在-O下运行速度较慢?
这件作品的Haskell代码运行多速度较慢-O,但-O应无危险。谁能告诉我发生了什么事?如果很重要,则尝试解决此问题,并使用二进制搜索和持久性段树: import Control.Monad import Data.Array data Node = Leaf Int -- value | Branch Int Node Node -- sum, left child, right child type NodeArray = Array Int Node -- create an empty node with range [l, r) create :: Int -> Int -> Node create l r | l …

6
Haskell中的孤立实例
使用该-Wall选项编译Haskell应用程序时,GHC会抱怨孤立实例,例如: Publisher.hs:45:9: Warning: orphan instance: instance ToSElem Result 类型类ToSElem不是我的,它是由HStringTemplate定义的。 现在,我知道如何解决此问题(将实例声明移动到声明Result的模块中),并且我知道为什么GHC宁愿避免使用孤立的实例,但我仍然相信我的方法会更好。我不在乎编译器是否不便-而不是我。 我想ToSElem在Publisher模块中声明实例的原因是因为它是Publisher模块依赖于HStringTemplate,而不是其他模块。我试图保持关注的分离,并避免让每个模块都依赖HStringTemplate。 我认为,例如与Java的接口相比,Haskell的类型类的优点之一是它们是开放的而不是封闭的,因此实例不必在与数据类型相同的位置声明。GHC的建议似乎是忽略这一点。 因此,我正在寻找的要么是验证我的想法是正确的,要么是忽略/抑制该警告是有道理的,要么是更令人信服的反对以我的方式做事的论据。
86 haskell  ghc  typeclass 

4
为什么不能使String成为类型类的实例?
鉴于: data Foo = FooString String … class Fooable a where --(is this a good way to name this?) toFoo :: a -> Foo 我想创建String一个实例Fooable: instance Fooable String where toFoo = FooString 然后,GHC抱怨: Illegal instance declaration for `Fooable String' (All instance types must be of the form (T t1 ... …

1
如何阅读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 :: Parity) :: Parity where Flip Even = Odd Flip Odd = Even data ParNat :: Parity -> * where PZ :: …

4
如何卸载Cabal软件包的版本?
Happstack Lite正在破坏我,因为它的版本为blaze-html 0.5,并且需要0.4。Cabal表示同时安装了0.4.3.4和0.5.0.0版本。我想删除0.5.0.0并仅使用旧版本。但是cabal没有“卸载”命令,当我尝试时ghc-pkg unregister --force blaze-html,ghc-pkg说我的命令已被忽略。 我该怎么办? 更新:不要相信。尽管ghc-pkg声称忽略了该命令,但并未忽略该命令。使用Don Stewart接受的答案,您可以删除希望删除的版本。
82 haskell  ghc  cabal 

4
是否应该使用GHC Haskell扩展?
在学习Haskell的过程中,我发现现实生活中的代码中使用了许多语言扩展。作为初学者,我应该学会使用它们,还是不惜一切代价避免使用它们?我看到它破坏了与Haskell 98的兼容性并将代码限制为仅GHC。但是,如果我在Hackage上浏览软件包,则无论如何我都会看到其中大多数都是纯GHC的。 那么,社区对于使用语言扩展的态度是什么? 如果可以使用扩展名,那么如何区分可以“安全”使用的扩展名(那些可能成为下一个Haskell标准的一部分)和大多数“实验性”扩展名呢?例如,我假设-XDisambiguateRecordFields很好并且有用,但是将来可能会支持它吗?
78 haskell  ghc 

4
如何在解释模式下运行Haskell文件
有人告诉我您可以解释Haskell文件(我认为这意味着它们将像Ruby / Python / Perl一样工作)。但是,我找不到GHC上的命令行选项。它总是想编译我的文件。也看了GHCi,但它总是使我陷入混乱。 我基本上只是想做ghc -i MyFile.hs(其中-i是我假装与解释模式相关的虚假标志)并执行它,以便在尝试想法和学习时可以快速获得反馈。

1
Haskell中(^)的怪异行为
为什么GHCi在下面给出错误的答案? GHCi λ> ((-20.24373193905347)^12)^2 - ((-20.24373193905347)^24) 4.503599627370496e15 Python3 >>> ((-20.24373193905347)**12)**2 - ((-20.24373193905347)**24) 0.0 更新 我将实现Haskell的(^)函数,如下所示。 powerXY :: Double -> Int -> Double powerXY x 0 = 1 powerXY x y | y < 0 = powerXY (1/x) (-y) | otherwise = let z = powerXY x (y `div` 2) in …

1
Haskell中的隐式静态类型强制转换(强制)
问题 在Haskell中考虑以下设计问题。我有一个简单的符号EDSL,我想在其中表达变量和一般表达式(多元多项式),例如x^2 * y + 2*z + 1。另外,我想在表达式(例如x^2 + 1 = 1)和定义(例如)上表达某些符号方程式x := 2*y - 2。 目标是: 变量和通用表达式具有单独的类型-某些函数可能会应用于变量,而不是复杂的表达式。例如,定义运算符:=可能是类型, (:=) :: Variable -> Expression -> Definition并且不应该将复杂的表达式作为其左侧参数传递(尽管应该可以将变量作为其右侧参数传递,而无需显式转换) 。 将表达式作为的实例Num,这样就可以将整数文字提升为表达式,并为常见的代数运算(如加法或乘法)使用方便的表示法,而无需引入一些辅助包装运算符。 换句话说,我希望对表达式进行变量的隐式和静态类型转换(强制转换)。现在,我知道这样,Haskell中没有隐式类型强制转换。但是,某些面向对象的编程概念(在这种情况下为简单继承)可以在Haskell的类型系统中表达,无论有没有语言扩展。如何在保持轻量级语法的同时满足以上两个条件?可能吗 讨论区 显然,这里的主要问题是Num类型限制,例如 (+) :: Num a => a -> a -> a 原则上,可以为变量和表达式编写单个(通用)代数数据类型。然后,可以这样写:=:区分左侧表达式,只接受变量构造函数,否则会出现运行时错误。但是,这不是一个干净的静态(即编译时)解决方案... 例 理想情况下,我想实现一种轻量级语法,例如 computation = do x <- variable t …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.