我有一个名为 TextFile 的自定义数据类型,它存储四个字符串,并且每次编辑文本文件时,我都需要能够将它的一个版本存储在堆栈中。这样我就可以实现某种形式的撤消和重做功能。
但是,堆栈将从其他函数中更新,并且每次都不会创建新堆栈,当我向其中推送某些内容时,我看不到保存更改的方法吗?
有没有一种方法可以创建一个堆栈并在每次从其中推送或弹出某些东西时更新同一个堆栈?
newtype Stack a = Stack [a] deriving (Eq, Show)
buffer = Stack [] :: Stack TextFile
data TextFile = TextFile String String String String deriving Show
file = TextFile "This is the left element" " This is the right element" "" ""
pop :: Stack a -> (Maybe a, Stack a)
pop (Stack (x:xs)) = (Just x, Stack xs)
pop (Stack []) = (Nothing, Stack [])
push :: a -> Stack a -> Stack a
push x (Stack xs) = Stack (x:xs)
为了澄清,我的主要问题是如果你不能在 Haskell 中更改变量的值,你如何在不复制堆栈的情况下创建一个结构?