我在macOS High Sierra上.
$ uname -v
Darwin Kernel Version 17.2.0: Fri Sep 29 18:27:05 PDT 2017; root:xnu-4570.20.62~3/RELEASE_X86_64
Run Code Online (Sandbox Code Playgroud)
我有以下合成程序.
void nop1() {
for (;;);
}
void nop2() {
while (1);
}
void nop3() {
int i = 0;
while(1) {
i++;
}
}
void nop4() {
static int i = 0;
while(1) {
i++;
};
}
int main() {
nop1();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑2:我现在已经在下面的例子中用clang明确编译了.
当我编译并运行以下C程序与clang -O2我得到总线错误时main()调用nop1(),nop2(),nop3()但不适合nop4().
$ ./a.out …Run Code Online (Sandbox Code Playgroud) 我对Haskell很新,并希望将makeLensesfrom Control.Lens和class约束与类型同义词一起使用,以使我的函数类型更紧凑(可读?).
我试图想出一个最小的虚拟示例来演示我想要实现的内容,并且该示例除此之外没有任何其他用途.
在这篇文章的最后,如果您对上下文感兴趣,我已经添加了一个更接近原始问题的示例.
最小的例子
举个例子,假设我定义了以下数据类型:
data State a = State { _a :: a
} deriving Show
Run Code Online (Sandbox Code Playgroud)
,我也制作镜片:
makeLenses ''State
Run Code Online (Sandbox Code Playgroud)
为了对a类型构造函数State使用的类型参数强制执行类约束,我使用了一个智能构造函数:
mkState :: (Num a) => a -> State a
mkState n = State {_a = n}
Run Code Online (Sandbox Code Playgroud)
接下来,假设我有许多类型签名的函数,类似于:
doStuff :: Num a => State a -> State a
doStuff s = s & a %~ (*2)
Run Code Online (Sandbox Code Playgroud)
这一切都按预期工作,例如:
test = doStuff . mkState $ 5.5 -- results in State {_a = 11.0}
Run Code Online (Sandbox Code Playgroud)
问题 …
我正在按照http://seanhess.github.io/2015/08/04/practical-haskell-getting-started.html开始使用堆栈工具。
$> stack --version
Version 0.1.3.1, Git revision 908b04205e6f436d4a5f420b1c6c646ed2b804d7
Run Code Online (Sandbox Code Playgroud)
在“安装 GHC”步骤中我得到Permission denied:
$> stack setup
Run from outside a project, using implicit global config
Using resolver: lts-3.2 from global config file: /Users/karl/.stack/global/stack.yaml
Preparing to download ghc-7.10.2 .../Users/karl/.stack/programs/x86_64-osx/ghc-7.10.2.tar.bz2.tmp:
openBinaryFile: permission denied (Permission denied)
Run Code Online (Sandbox Code Playgroud)
这是预期的(指南中的错误)还是中的错误stack?
运行相同的命令sudo似乎可以解决问题。这是预期的方法吗?
$> sudo stack setup
Password:
Downloaded ghc-7.10.2.
Installed GHC.
stack will use a locally installed GHC
For more information on paths, see 'stack path' and 'stack exec env' …Run Code Online (Sandbox Code Playgroud) 作为我上一个问题的后续使用makeLenses,类约束和类型同义词,我有一个新的类型错误,我想了解.
类型错误是由type S = (Num n) => State n以下示例中引入类型同义词引起的.
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE RankNTypes #-}
module Foo where
import Control.Lens
data State a = State { _a :: a
} deriving Show
makeLenses ''State -- Requires TemplateHaskell
-- | Smart constructor enforcing class constraint on record field _a.
mkState :: (Num a) => a -> State a
mkState n = State {_a = n}
doStuff1 :: Num a => State a -> State a …Run Code Online (Sandbox Code Playgroud) 我想使用Megaparsec解析Haskell中与此类似的文本.
# START SKIP
def foo(a,b):
c = 2*a # Foo
return a + b
# END SKIP
Run Code Online (Sandbox Code Playgroud)
,where # START SKIP和# END SKIP标记要解析的文本块的开头和结尾.
与skipBlockComment相比,我希望解析器返回开始和结束标记之间的行.
这是我的解析器.
skip :: Parser String
skip = s >> manyTill anyChar e
where s = string "# START SKIP"
e = string "# END SKIP"
Run Code Online (Sandbox Code Playgroud)
在skip按预期解析器工作.
为了在开始和结束标记内允许可变数量的空格,例如# START SKIP我尝试了以下内容:
skip' :: Parser String
skip' = s >> manyTill anyChar e
where s = symbol "#" >> …Run Code Online (Sandbox Code Playgroud)