从GHC用户指南,好像最Pat可能PBangPat,但也有一些例外.例如,模块中的顶级刘海(例如!main)是不允许的,并且 x : !xs无法解析x : (!xs) parses感谢@chi.关于可以添加刘海的正式规范是什么?我查看了用户指南和报告的一些章节但没有发现任何内容.
出于某种原因,我需要欺骗Haskell执行一个无限循环,而不是仅仅检测它并退出<<loop>>,但它太聪明了.是否有任何方便的例子,其中循环是由严格注释(!)引起的,还是我可以关闭循环检测?目前我在做
x = x + y
y = x + y
inf !n = 0
main = do
print $ inf x
Run Code Online (Sandbox Code Playgroud) 当我只有datatype Nt = int | string,sml不抱怨.但是当我也有val n = 6 : Nt,ml不接受6作为Nt.为什么是这样?我知道,通常应该有数据之前建设者int和string,但在这里我具有定义,可以采取两种功能int或string.
我需要在源代码集合上测试我的haskell优化器,我现在正在尝试在标记为programhackage 的包上运行优化器.然而,编译它们(依赖项)并让它们运行(输入)是一件痛苦的事情.
是否有包含易于构建和运行的程序的源代码数据库?如果他们有一些使用严格注释来提高性能的代码会更好(因为这是我的优化器所做的).
解析包含#define和的haskell源文件时#if,parseFileContentsWithMode会混淆并抛出有关散列的错误.我想包括MagicHash和CPP扩展名列表(extns见下文),但没有奏效.我无法真正更改源文件,因为它们有很多.
getModule extns filePath program = fromParseResult $ parseFileContentsWithMode mode program
where
bangPatternsExt = map parseExtension extns
mode = ParseMode filePath Haskell2010 bangPatternsExt False False
Run Code Online (Sandbox Code Playgroud)
解析器失败了:
#if __GLASGOW_HASKELL__ >= 612
instance Lift ModName where
lift = lift . modString
Run Code Online (Sandbox Code Playgroud)