我有以下代码
{-# LANGUAGE Arrows #-}
test :: Int -> Int
test =
proc x -> do
let x = case x of
3 -> 2
2 -> 1
_ -> 0
returnA -< x
test2 =
proc x -> do
let x =
case x of
3 -> 2
2 -> 1
_ -> 0
returnA -< x
Run Code Online (Sandbox Code Playgroud)
测试编译,但test2不解析.在=后可以将案例放在单独的行上吗?
考虑以下程序:
module Main where
import Control.Monad.List
main = runListT $ do
x <- ListT $ return $ [0..1000000000]
lift $ print x
Run Code Online (Sandbox Code Playgroud)
理想情况下,我们希望在使用它时对列表进行垃圾收集,以便该程序仅使用常量内存.但是当我编译并运行它时
ghc Main.hs -O2 -o Main
我看到它继续使用越来越多的内存.如何让Haskell向GC说服列表中消耗的元素?
我正在尝试使用SCC(设置成本中心)注释来配置我的程序.找出do语句定义的monad运行需要多长时间的最佳方法是什么?(将SCC语句放入do块中是违法的.)换句话说,假设我有:
do
x <- computeStuff
y <- computeStuff
return (x + y)
Run Code Online (Sandbox Code Playgroud)
如何找到两者的总执行时间computeStuff和x + y(而不是Monad的施工时间)?
我想为我的整个货运项目启用功能门.例如,我想#![feature(non_ascii_idents)]添加到每个源文件.有没有可以列出的地方Cargo.toml?
考虑一下这个Rust程序:
fn main() {
let mut z : Vec<Vec<(bool,f64)>> = Vec::with_capacity(10);
unsafe { z.set_len(10); }
z[0] = vec!((true,1.));
println!("{:?}", z[0]);
}
Run Code Online (Sandbox Code Playgroud)
https://play.rust-lang.org/?gist=ccf387ed66a0d8b832ed&version=stable
Rust应该z[0]在我们设置时尝试删除,并且由于z[0]未初始化它应该使程序崩溃.但它运行正常.为什么?
我有一个HashMap<(String, usize), f64>.我也有一个&str和一个usize,我想在HashMap没有克隆的情况下查看.有没有一种方法来查找一(&str, usize)为(String, usize)不知何故?
考虑一下这段代码:
incState state i = map (+ i) state
main =
sequence_ $ do
n <- map last $ scanl incState (replicate 1000000 0) (repeat 1)
return $ print $ n
Run Code Online (Sandbox Code Playgroud)
当我运行它时,内存使用量不断增加,因为它打印出数字.这里的内存泄漏在哪里?它应该只保留一定量的内存,以前的值state应该在打印时丢弃.
即使sequence_或列表monad持有的值n,每次迭代只有一个整数.我看到6G的内存被使用后它只能达到100个.一百万个整数最多只能占用10M.
我想写:
minimum $ map _x elems
Run Code Online (Sandbox Code Playgroud)
使用镜头.我想使用minimumOf镜头,但我无法弄清楚如何使用它的类型.
我正在寻找类似的东西
elems ^.. minimumOf x
Run Code Online (Sandbox Code Playgroud)
但它没有打字检查:
Prelude Control.Lens Data.Map> let elems = [(1,2),(3,4)] :: [(Double, Double)]
Prelude Control.Lens Data.Map> elems ^.. minimumOf _1
<interactive>:62:11:
Couldn't match type ‘Maybe a0’
with ‘[(Double, Double)]
-> Const (Data.Monoid.Endo [a]) [(Double, Double)]’
Expected type: Getting (Data.Monoid.Endo [a]) [(Double, Double)] a
Actual type: (a -> Const (Data.Monoid.Endo [a]) a) -> Maybe a0
Relevant bindings include it :: [a] (bound at <interactive>:62:1)
Possible cause: ‘minimumOf’ is applied …Run Code Online (Sandbox Code Playgroud) 我正在使用该linear库,我正在尝试创建一种推理三角矩阵的方法.
作为第一步,我正在尝试创建一种方法来计算下三角矩阵的大小.因此,例如,a M22具有带有3个元素的下三角矩阵,因此它将被映射到V3.
这是我的尝试:
import Linear
type family LowerTriPacked v :: * -> *
type instance LowerTriPacked V0 = V0
type instance LowerTriPacked V1 = V1
type instance LowerTriPacked V2 = V3
Run Code Online (Sandbox Code Playgroud)
但它没有打字检查,有:
Expecting one more argument to ‘V0’
The first argument of ‘LowerTriPacked’ should have kind ‘*’,
but ‘V0’ has kind ‘* -> *’
In the type ‘V0’
In the type instance declaration for ‘LowerTriPacked’
Run Code Online (Sandbox Code Playgroud)
这样做类型检查:
type family LowerTriPacked2 v :: *
type instance …Run Code Online (Sandbox Code Playgroud) 我想写一些如下代码:
struct Foo {
foo: usize
}
impl Foo {
pub fn get_foo<'a>(&'a self) -> &'self usize {
&self.foo
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,失败了invalid lifetime name: 'self is no longer a special lifetime.
如何返回与对象本身一样长的引用?
haskell ×6
rust ×4
ghc ×1
indentation ×1
lenses ×1
lifetime ×1
memory-leaks ×1
performance ×1
profiling ×1
rust-cargo ×1
type-kinds ×1