小编Kag*_*Umi的帖子

为什么`print <$>(print“ hello”)`打印“ hello”?

IO (IO ())同时计算(IO ())和时(),为什么

main :: IO (IO ())
main = print <$> (print "Hello, World!")
Run Code Online (Sandbox Code Playgroud)

打印

"Hello, World!"
Run Code Online (Sandbox Code Playgroud)

IO "Hello, World!" -- ??
"Hello, World!"
Run Code Online (Sandbox Code Playgroud)

haskell

14
推荐指数
1
解决办法
570
查看次数

eq 怎么做?在球拍中使用符号和数字?

球拍文件告诉我:“eq?回报#t,如果v1v2指向同一个对象”,但有两个fixnums=也同样地按照eq?=“收益#t如果所有的参数都是数值上相等”。我找不到关于“数字”和“符号”的任何消息,但在我发现的示例中:

> (eq? 'yes 'yes)
#t
Run Code Online (Sandbox Code Playgroud)

这与上面的矛盾,因为上面从来没有提到过symbol是特殊的,所以'yes'yes不一样。

这让我更加困惑:

> (eq? (expt 2 100) (expt 2 100))
#f
> (eq? (* 6 7) 42)
#t
Run Code Online (Sandbox Code Playgroud)

如果数字是用数字测试的,那么(eq? (expt 2 100) (expt 2 100))应该返回#t,否则,数字是通过引用测试的,然后(eq? (* 6 7) 42)应该返回#f,所以我猜以上两种情况都不对......

为什么?!

racket

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

switch 必须在递归类型中穷举

enum Tree<Element: Comparable> {
  case empty
  indirect case node(Tree<Element>, Element, Tree<Element>)

  func forEach(withLooping fn: (Element) -> Void) {
    var stack = [self]
    while !stack.isEmpty {
      let current = stack.popLast()
      switch current {
      case .empty: break
      case let .node(left, value, right):
        fn(value)
        stack.append(left)
        stack.append(right)
      case .none: // !!!
        break
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Xcode 强制我添加.none大小写,但.none不是的构造函数Tree

xxx.swift:9:7: error: switch must be exhaustive
      switch current {
      ^
xxx.swift:9:7: note: add missing case: '.none'
      switch current {
Run Code Online (Sandbox Code Playgroud)

为什么?

swift

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

Haskell的State Monad在哪里,如何使用?

我正在学习State Monad,并被告知它已不存在,第一个问题是为什么Haskell删除了它?

当我使用

import Data.Functor.Identity
import Control.Monad.Trans.State

type State s = StateT s Identity
Run Code Online (Sandbox Code Playgroud)

我懂了

Ambiguous occurrence ‘State’
    It could refer to
       either ‘Control.Monad.Trans.State.State’
           or ‘Main.State’,
Run Code Online (Sandbox Code Playgroud)

但是当我尝试时:t State,我什么也没找到。这是自相矛盾的,我想知道它是否存在?

最后,我自己写

newtype State s a = State { runState :: s -> (a, s) }
Run Code Online (Sandbox Code Playgroud)

但是我还需要其他一些功能,例如putget...它们在哪里。

使用:i get中,我发现MonadState,这是新的实施 State

monads haskell monad-transformers

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

标签 统计

haskell ×2

monad-transformers ×1

monads ×1

racket ×1

swift ×1