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) 球拍文件告诉我:“eq?回报#t,如果v1和v2指向同一个对象”,但有两个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,所以我猜以上两种情况都不对......
为什么?!
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)
为什么?
我正在学习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)
但是我还需要其他一些功能,例如put,get...它们在哪里。
使用:i get中,我发现MonadState,这是新的实施 State?