小编Mac*_*cki的帖子

Haskell`永远'类型签名

在Haskell中,为什么是类型签名 forever

forever :: Monad m => m a -> m b
Run Code Online (Sandbox Code Playgroud)

具体为什么不是这样:: Monad m => m a -> m a呢?当然,我们所采取行动的monad类型并没有改变一半forever

功能如:

 forever' :: Monad m => m a -> m a
 forever' = forever
Run Code Online (Sandbox Code Playgroud)

似乎完全一样.

monads haskell types type-signature

13
推荐指数
1
解决办法
353
查看次数

REPL和脚本之间的'this'不同

通过阅读Mozilla文档后,我发现了这个:

在全局执行上下文中(在任何函数之外),这指的是全局对象,无论是否处于严格模式.

在播放了一些示波器后,我在node.js中发现了REPL ...

> this === global
true
Run Code Online (Sandbox Code Playgroud)

但是当我创建一个具有相同行的脚本时......

$ cat > script.js
console.log(this === global)
$ node script.js
false
Run Code Online (Sandbox Code Playgroud)

是否有一个原因?或者这是一个错误?

javascript global this node.js

10
推荐指数
1
解决办法
256
查看次数

转换产生无效指针的函数引用?

我正在跟踪第三方代码中的错误,并将其缩小到类似的范围。

use libc::c_void;

pub unsafe fn foo() {}

fn main() {
    let ptr = &foo as *const _ as *const c_void;
    println!("{:x}", ptr as usize);
}
Run Code Online (Sandbox Code Playgroud)

在稳定的1.38.0上运行,这会打印功能指针,但beta(1.39.0-beta.6)和夜间返回'1'。(游乐场

_推断出什么,为什么行为发生了变化?

我认为正确的方法只是foo as *const c_void,但这不是我的代码。

types casting undefined-behavior rust

9
推荐指数
1
解决办法
154
查看次数

在C中使用后增量时返回变量

我有一个叫做var函数的全局变量foo.(我知道这是一个不好的做法,但有时它是不可避免的)我想知道C标准(我正在使用c99进行编译)说var如果我尝试执行会发生什么:

long foo(){
    return var++;
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

c standards global-variables c99 language-lawyer

7
推荐指数
2
解决办法
3358
查看次数

这个vim的历史窗口叫什么?

有时当我执行vim命令时,会出现像窗口这样的历史.任何人都知道它的作用,它叫什么以及如何使它出现?

VIM

vim misspelling

5
推荐指数
1
解决办法
153
查看次数

Vec<i8> 和 &str 之间的转换

我有一个Vec<i8>我需要读为&str. 现在我找到了两种方法来做到这一点,但这两种方法都让我不高兴。

// Quite complex for something this simple
str::from_utf8(buffer.into_iter().map(|c| c as u8).collect::<Vec<u8>>().as_slice())
Run Code Online (Sandbox Code Playgroud)

// transmute makes me uncomfortable
str::from_utf8(mem::transmute::<Vec<i8>, Vec<u8>>(buffer).as_slice());
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来实现这一目标?

string vector type-conversion slice rust

5
推荐指数
1
解决办法
2084
查看次数

为什么 clang 不愿意或无法消除这里的重复加载

考虑以下 C 程序:

typedef struct { int x; } Foo;

void original(Foo***** xs, Foo* foo) {
    xs[0][1][2][3] = foo;
    xs[0][1][2][3]->x = 42;
}
Run Code Online (Sandbox Code Playgroud)

据我了解,根据 C 标准,Foo**不能使用别名Foo*等,因为它们的类型不兼容。使用 clang 14.0 编译程序,-O3但会导致重复加载:

    mov     rax, qword ptr [rdi]
    mov     rax, qword ptr [rax + 8]
    mov     rax, qword ptr [rax + 16]
    mov     qword ptr [rax + 24], rsi
    mov     rax, qword ptr [rdi]
    mov     rax, qword ptr [rax + 8]
    mov     rax, qword ptr [rax + 16] …
Run Code Online (Sandbox Code Playgroud)

c optimization llvm clang strict-aliasing

5
推荐指数
1
解决办法
450
查看次数

在Haskell中应用多个参数的更简单方法

给定值f类型:: Applicative f => f (a -> b -> c),将参数映射到内部函数的最佳方法是什么.

到目前为止,我发现了以下内容:

(\x -> x a b) <$> f

(flip ($ a) b) <$> f

($ b) <$> ($ a) <$> f

我想我的问题是为什么Haskell没有:: a -> b -> (a -> b -> c) -> c功能.或者是吗?

haskell functional-programming composition functor applicative

4
推荐指数
1
解决办法
253
查看次数

字符串 io::Errors 是如何创建的

Rust文档显示了std::io::Error使用创建的

let custom_error = Error::new(ErrorKind::Other, "oh no!");
Run Code Online (Sandbox Code Playgroud)

并且new有一个类型签名

fn new<E>(kind: ErrorKind, error: E) -> Error 
  where E: Into<Box<std::error::Error + Send + Sync>>
Run Code Online (Sandbox Code Playgroud)

我找到了一种实现impl<T: std::error::Error> std::error::Error for Box<T>但找不到&'static str像示例中使用的那样的实现。

使用什么特征来实现Into<Error>字符串?

error-handling std traits rust

3
推荐指数
1
解决办法
559
查看次数

Haskell类型错误消息

在过去的几天里,我一直在努力学习Haskell.虽然我正在慢慢变好,但我发现很难用Haskell的IO来推理,可能是因为我缺乏知识.我一直在尝试编写一个简单的待办事项列表程序.这是我得到的:

tadd todo = do
    td <- getLine
    td:todo

tdel todo = do
    trem <- getLine
    let rid = read trem :: Int
    [todo !! x | x <- [0..(length todo-1)], not $ x == rid]

tls todo = do
    mapM putStrLn [ (show x) ++ (todo !! x) | x <- [0..(length todo -1)] ]
    todo

mtodo "add" todo = tadd todo
mtodo "del" todo = tdel todo
mtodo "ls"  todo = tls todo


bege = do
    com <- …
Run Code Online (Sandbox Code Playgroud)

haskell types typeerror

2
推荐指数
1
解决办法
823
查看次数

使用GHC Generics时,参数类型错误

我一直在关注GHC.Generics教程,制作一个简单的通用类型类,为任意类型提供默认值.但是,当我尝试加载我的文件(相关片段,仍然产生错误)

{-# LANGUAGE DefaultSignatures, DeriveGeneric, TypeOperators, FlexibleContexts #-}
import GHC.Generics

class Default a where
    def :: a
    default def :: (Generic a, GDefault (Rep a)) => a
    def = to gdef

class GDefault f where
    gdef :: f a

instance (Default a, Default b) => GDefault (a :+: b) where
    gdef (L1 x) = gdef x
    gdef (R1 x) = gdef x
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Generic.hs:12:46:
    The first argument of ‘:+:’ should have kind ‘* -> *’,
      but ‘a’ has …
Run Code Online (Sandbox Code Playgroud)

haskell types typeclass ghc

2
推荐指数
1
解决办法
61
查看次数

为什么“ $ git log --graph ”不起作用

我最近尝试在 git 中使用分支,但是虽然它们工作正常,但无论我做什么,我都无法显示我的分支和合并的图表。我已经在 ubuntu 和 gitk -all 上尝试过 Giggle,但它们都没有像 nettuts+ 教程中所示那样工作。我已经在 ubuntu 和 gitk -all 上尝试过 Giggle,但没有一个像 nettuts+ 教程http://net.tutsplus.com/tutorials/other/easy-version-control-with-git/

我输入

$ git log --graph #Sorry my sreenshot is missing h at the end
Run Code Online (Sandbox Code Playgroud)

但不是这个...

在此输入图像描述

...我明白了...

我的输出

如果能快速回复我真的很高兴......

这是 ' $ gitk --all ' 的输出

在此输入图像描述

linux git ubuntu logging graph

0
推荐指数
1
解决办法
2207
查看次数