【发布时间】:2019-02-18 13:58:19
【问题描述】:
我们有以下任务给出的类型
newtype Trans state a = T {run :: state -> (a,state)}
type Stack a = Trans [Int] a
我想要的是写一个函数 1. push 将一个 Integer 入栈 2. pop 返回并移除最高对象
我试图通过状态 monads 谷歌来理解它们,我得到了这个概念,但我无法用给定的类型结构来实现它。
【问题讨论】:
-
你确定这是
Stack的正确定义吗?我觉得应该是type Stack a = Trans [a] a。 -
而且我相信您被要求编写的函数是简单的“纯”函数
state -> (a, state),然后您将了解 State monad 以及它如何简化此类堆栈的系列操作。为了编写这些基本函数,您无需了解 monad 如何“工作”。 -
@RobinZigmond 我不知道,也许吧,但我不认为这有什么不同,因为我们只有处理整数的任务
-
a是对Stack的操作的返回值,例如push :: Int -> Stack ()和pop :: Stack Int。 -
谢谢,这是我想出来的: push :: Int -> Stack () pop :: Stack Int add :: Stack () (从堆栈中取两个元素,计算总和并放入它回到堆栈上)。我仍然不知道如何实现它。怎么写。