小编Yol*_*Voe的帖子

为什么(>>)没有定义为(*>)?

GHC目前实施>>

(>>) :: m a -> m b -> m b
m >> k = m >>= \_ -> k
Run Code Online (Sandbox Code Playgroud)

为什么不这样做呢?

(>>) :: m a -> m b -> m b
m >> k = m *> k
Run Code Online (Sandbox Code Playgroud)

现在,我在想>>=什么*>都没有.

但是所有的东西都是按语法编写的(如在类型方面),所以很难说明为什么它不起作用.也许monad实例做了一些应用实例没有的计算,但我认为这会破坏该类型的语义.

更新我只能选择一个SO答案,但dfeuer答案非常有见地(特别是对于像我这样在Haskell相对缺乏经验的人).

haskell ghc

21
推荐指数
2
解决办法
907
查看次数

切片和映射之间的行为差​​异

相关问题在这里/sf/answers/907611071/

在go中,你可以这样做:

func numsInFactorial(n int) (nums []int) {
    // `nums := make([]int)` is not needed
    for i := 1; i <= n; i++ {
        nums = append(nums, i)
    }
    return
}
Run Code Online (Sandbox Code Playgroud)

但是,以下方法不起作用:

func mapWithOneKeyAndValue(k int, v int) (m map[int]int) {
    m[k] = v
    return
}
Run Code Online (Sandbox Code Playgroud)

抛出错误:

panic: assignment to entry in nil map

相反,您必须:

func mapWithOneKeyAndValue(k int, v int) map[int]int {
    m := make(map[int]int)
    m[k] = v
    return
}
Run Code Online (Sandbox Code Playgroud)

我找不到此行为的文档。我已经通读了所有 effective go 的内容,那里也没有提到它。
我知道命名返回值已定义(即内存已分配;接近于分配的new内存)但未初始化(因此make行为未复制)。 …

go

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

标签 统计

ghc ×1

go ×1

haskell ×1