newtype State s a = StateOf (s -> (s, a))
(s -> (s, a))
是一个函数,不是吗?
newtype State s a = State { runState :: s -> (s, a) }
这样的表达式很有意义,因为允许使用记录语法。
答案 0 :(得分:2)
(s -> (s, a))
是一个函数,不是吗?
不确定是否能回答您的问题,但是:从技术上讲否,(s -> (s, a))
不是函数,它是函数类型。即,其值为函数的类型。因此,State
是一种新类型,其值在内部作为函数给出(但从外部看,它们只是“某些不透明的命名类型的值”)。
答案 1 :(得分:1)
函数也是值。至于定义类型,记录语法只是提供了一个快捷方式
newtype State s a = StateOf (s -> (s, a))
runState :: State s a -> s -> (s, a)
runState (StateOf f) = f
(记录语法还提供其他模式匹配和值构造语法。)