- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正试图围绕 GHC 扩展 KindSignatures
和 DataKinds
.看着Data.Modular包,我大致了解
newtype i `Mod` (n :: Nat) = Mod i deriving (Eq, Ord)
<typename T, int N>
(构造函数只接受一个
T
类型的参数)。但是,查看
GHC.TypeLits包,我不明白发生了什么。关于这个包的任何一般性解释都会有所帮助。在这个问题被标记为离题之前,这里有一些具体的子问题:
KnownNat
类是有意义的,需要的函数可以让你从类型中提取类型变量,但是 natVal
做,什么是proxy
类型变量? someNatVal
? SomeNat
- 类型级别编号怎么可能是未知的? 不是类型级别编号的全部意义吗?是 在编译时知道吗? 最佳答案
这个问题很宽泛——我只谈几点。proxy
类型变量只是一种类型变量 * -> *
,即类型构造函数的类型。务实地说,如果你有一个功能
foo :: proxy a -> ...
Maybe Int
, 选择
proxy = Maybe
和
a = Int
.您还可以传递
[] Char
类型的值(也写为
[Char]
)。或者,更常见的是
Proxy Int
类型的值, 其中
Proxy
是一种数据类型,定义为
data Proxy a = Proxy
a
)。
N
是一种类型
Nat
-- 编译时自然。我们可以写一个函数
bar :: N -> ...
N
类型的值。 ——这无关紧要。类型
N
的用途只是携带编译时信息,它的运行时值并不是我们真正想要使用的东西。事实上,
N
除了底部之外,可能根本没有任何值。我们可以打电话
bar (undefined :: N)
bar
它的第一个论点是懒惰的,并且尝试使用它不会引起分歧。问题是
bar :: N -> ...
类型签名具有误导性:它声称结果可能取决于类型
N
的参数的值, 当情况并非如此时。相反,如果我们使用
baz :: Proxy N -> ...
Proxy :: Proxy N
.同样清楚的是
N
value 仅在编译时存在。
Proxy N
, 代码稍微概括为
foo :: proxy N -> ...
Proxy
类型。 (就个人而言,我对这种概括并不感到非常兴奋。)
natVal
是一个函数,它可以将编译时自然地转换为运行时值。 IE。它转换
Proxy N
进入
Int
,只返回常数。
template <typename N> struct S { using pred = N; };
struct Z {};
template <typename N> int natVal();
template <typename N> int natVal() { return 1 + natVal<typename N::pred>(); }
template <> int natVal<Z>() { return 0; }
int main() {
cout << natVal<S<S<Z>>>() << endl; // outputs 2
return 0;
}
S
没有公共(public)构造函数和
Z
:它们的运行时值并不重要,只有它们的编译时信息才重要。
关于haskell - 了解 `GHC.TypeLits`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30583558/
runghc 和 ghc 有什么区别? 我运行了一个简短的程序,似乎可以用两者编译,除了我用 runghc 得到了以下内容,但不是普通的 ghc: error: Variable not in sco
如果 friend 想要运行我的 Haskell 二进制文件,他是否必须先安装 Haskell,还是可以立即自行运行二进制文件? Mac、Windows 和 Linux 上的答案相同吗? 最佳答案 G
ffunction glMultiDrawElements 需要一个指向指针的指针作为其参数之一。如何从 StorableArray Int a 获取 Ptr(Ptr a) ? 最佳答案 您需要先将索
module Has (r,p,s) where import Prelude ((==),Bool(..),otherwise,(||),Eq) import qualified Data.List
我已经构建了 ghc-HEAD,我想尝试构建所有的 stackage lts 或 nightly 看看它能做多少。 无论我说什么都无法说服 stack 使用我的新 ghc 构建任何东西。我尝试设置如下
我正在使用 Emacs (24.3.1) 在 haskell-mode 中与 ghc-mod 一起使用 Haskell。 现在除了一件烦人的事情外,一切都很好: GHC 信息缓冲区中的每个输出仅包含第
为什么升级到 OSX Mavericks 后我的 GHC 7.6.3 不能工作? 最佳答案 花了很长时间才弄清楚如何同时使用 OSX 10.9 和 GHC 7.6.3,这里有一些技巧可以帮助您重新构建
我有一个带有 cabal 文件的主要 Haskell 可执行程序。在那里,我指定 ghc-options . 这个可执行文件链接到野外的其他库。请问ghc-options忽略这些库的 cabal 文件
我有一个使用 -Wall 编译的库,并且我有一个使用 -Wall -Wno-incomplete-patterns 的测试套件 当我使用 stack ghci --test 启动 ghci 时,ghc
我正在尝试使用以下脚本在 Windows 上安装 GHC(并将 ghc 放在路径中),但是当我尝试运行 ghci --version 时它失败了。我认为脚本有问题。 install: - ps:
我在 $HOME 中安装了 ghc-7.2.2 unknown linux tar.bz2在archlinux上。 在使用 cabal-dev 成功安装多个软件包后,尝试安装例如。我得到的解析数字、文
想法 我正在写 DSL ,编译为 Haskell。 该语言的用户可以定义自己的不可变数据结构和相关函数。关联函数是指属于数据结构的函数。 例如,用户可以编写(在“pythonic”伪代码中): dat
(我的问题是在没有 haskell-platform、ghc、cabal 等的情况下分发二进制文件) 我需要部署一个结构良好的 haskell 应用程序(Yesod 脚手架),但我有磁盘空间限制。 G
我试图将 Cygwin 安装程序指向 http://haskell.org/ghc/cygwin ,但安装程序无法找到 setup.ini.sig。如果可能的话,我该如何编辑我的 .bashrc 以引
我有一个现有的 Haskell 函数,它使用 GHC API 从模块中动态加载已编译的代码。它基于博客文章中的代码 Dynamic Compilation and Loading of Modules
我使用:Ubuntu 上的 GHC 7.6.3(通过 apt-get install haskell-platform) 从当前存储库安装它。 正在尝试安装ghc-mod ,因为我的 ide 插件需要
AFAIK,有两种方法可以在 Haskell 中获取用于调试的调用堆栈: 添加 HasCallStack代码中的约束 使用 ghc -prof -fprof-auto-top 编译代码 我的测试代码:
我想用 64 位 GHC 构建 32 位 DLL。这是最小的例子。 测试.hs {-# LANGUAGE ForeignFunctionInterface #-} module Test where
ghc-gc-tune 0.2.1 可以与 ghc 7.4.1 一起使用吗?看来 ghc-gc-tune 已经有一段时间没有更新了,可能只适用于 ghc 6.x?我找不到任何可靠的信息。 我收到以下错
语言扩展 ExplicitForall 使得使用 forall 绑定(bind)类型变量成为可能但不是必需的。 例如,下面的程序可以编译 {-# LANGUAGE ExplicitForAll #-}
我是一名优秀的程序员,十分优秀!