Haskell中的record field语义算是一个好设计吗?

比如经典的State monad的如下定义:

newtype State s a = { runState :: s -> (a, s) }

按照Haskell的语义,该声明生成了一个用于访问属性的全局函数

runState :: State s a -> s -> (a, s)

可以看到两个runState字面相同,类型签名却不一样,给初学阶段带来不少疑惑。可不可以理解为这种声明是对

newtype State s a = { runState :: self -> s -> (a, s) }
的一种简化?
默认排序 按时间排序

3 个回答

parker liu 世间万物,一阴一阳,天下至理,莫非阴阳。
dram Bad Apple!! // 渣渣程序员

加入知乎

与世界分享你的知识、经验和见解

验证码
已有帐号?
35 人关注该问题