首页 文章
  • -2 votes
     answers
     views

    哈斯克尔州Monad协调员

    我想弄清楚Monad的状态如何 . 我正在尝试实现一个获取两个坐标 (x, y) 并返回 x 或 y 坐标的函数 . 这应该发生在Monad州内 . data Coordin = Coordin {x,y :: Float} 应该实现的功能看起来像这样: getX :: State Coordin Float getY :: State Coordin Float 这怎么可行? 我试过这个: ...
  • 57 votes
     answers
     views

    使用Haskell状态monad一个代码气味?

    上帝我讨厌“代码味”这个词,但我想不出更准确的东西 . 我正在设计一个高级语言和编译器,以便在我的业余时间学习编译器构造,语言设计和函数编程(编译器是用Haskell编写的) . 在编译器的代码生成阶段,我必须在遍历语法树时保持“状态” - 数据 . 例如,在编译流控制语句时,我需要为要跳转的标签生成唯一的名称(从传入,更新和返回的计数器生成的标签,并且绝不能再次使用计数器的旧值) . 另一个例子...
  • 14 votes
     answers
     views

    Haskell Monad变换器堆栈和类型签名

    我正在尝试创建一堆monad变换器,并且无法为我的函数获取正确的类型签名 . (我仍然是Haskell的新手) 该堆栈结合了多个StateT变换器,因为我有多个状态需要跟踪(其中两个可能是tupled,但我会在一秒钟内完成)和一个WriterT用于记录 . 这是我到目前为止所拥有的: module Pass1 where import Control.Monad.Identity import ...
  • 11 votes
     answers
     views

    State Monad具有多个州的 Value 观

    考虑以下: do x1 <- new 2 set x1 3 x2 <- get x1 y1 <- new 10 set y1 20 y2 <- get y1 return (x2 + y2) 我想要这导致 23 . 有没有办法在纯Haskell中实现这样的东西,如果是这样的话怎么样?我理解 STRef 做了类似的事情,但我只是想在普通的Has...
  • 1 votes
     answers
     views

    State Monad Bind

    我想我理解State Monad是如何运作的 . 我设法写了一些使用State Monad的代码 . 我理解Monad的国家实例如何运作: instance Monad (State s) where return x = State $ \s -> (x,s) (State h) >>= f = State $ \s -> let (a, newState) = ...
  • 4 votes
     answers
     views

    将ST monad重新装扮成类似于州Monad的东西

    这是一个场景:给定的是一个C库,其核心是一些结构,其中的操作由丰富的C函数提供 . Step 1: 使用Haskell的FFI创建了一个包装器 . 它具有 myCLibInit :: IO MyCLibObj , myCLibOp1 :: MyCLibObj -> ... -> IO () 等功能 . MyCLibObj 是一个opaque类型,它将 Ptr 或 ForeignPt...
  • 0 votes
     answers
     views

    来自Haskell的State Monad的ID [复制]

    可能重复:在Haskell中创建唯一标签 我有一个数据类型Person和一些输入数据,我将从中创建人员 . 我想让每个人都有自己的ID(假设整数[0 ..]) . 我可以通过递归来做到这一点,但是因为我在Haskell中这样做,所以我想了解monad . 我想,State Monad可能是这项工作的最佳人选 . 问题是,我并不是很了解很多东西:当我在monad中时(什么功能可以使用内部),我如...
  • 8 votes
     answers
     views

    如何将可变向量放入状态Monad

    我在haskell中编写了一个小程序,使用State Monad with Vector计算Tree中所有的Int值的出现次数: import Data.Vector import Control.Monad.State import Control.Monad.Identity data Tree a = Null | Node (Tree a) a (Tree a) deriving Sho...
  • 1 votes
     answers
     views

    State Monad然后(>>)

    我想知道Haskell状态monad的 >> 的定义 . 根据我的猜测,它将一个州传递给另一个州: (>>) :: State s a -> State s b -> State s b State a >> State b = State $ \x -> b $ snd ( a x ) 要么 State a >> State b...
  • 0 votes
     answers
     views

    使用状态monad返回值

    我是Monads和Haskell的新手,并试图了解如何在使用它们时返回值 . 我的代码如下所示: foo :: A -> B foo a = do b <- fooC a (C 0) -- want to return just (B "b") fooC :: A -> C -> State MyState B fooC a ...
  • 1 votes
     answers
     views

    单元的元组(monad,state)?

    我正在尝试使用Monads编写一个Haskell "number-guessing"游戏程序,但我被困了:我尝试了简单的状态monad: data SM a = SMN (S -> (a, S)) instance Monad SM where SMN c1 >>= fc2 = SMN (\s0 -> let (r, s1) = c1 s0 in ...
  • 16 votes
     answers
     views

    State Monad,随机数序列和monadic代码

    我正在努力掌握State Monad并且为了这个目的,我想编写一个使用线性同余生成器生成一系列随机数的monadic代码(可能不好,但我的目的只是学习State Monad,而不是 Build 一个好的RNG库) . 生成器就是这样(为了简单起见,我想生成一个 Bool 序列): type Seed = Int random :: Seed -> (Bool, Seed) random s...
  • 7 votes
     answers
     views

    被困在州Monad

    我想使用节点和唯一键的IntMap创建图形结构 . 这个主题已经涵盖here和here . 我理解状态monad是如何工作的,基本上将状态函数 - >(val,state)包装在newtype中,这样我们就可以为它创建一个monad实例 . 我已经阅读了很多相关主题 . 我仍然无法理解如何在程序执行过程中获得唯一(或仅增量)值 . 它's easy enough to get a run o...
  • 4 votes
     answers
     views

    在Haskell中组合ST和List monad

    使用 StateT monad变换器,我可以创建类型 StateT s [] a ,它与 s -> [(a, s)] 同构 . 现在我宁愿使用STT monad transformer,因为我希望有多个不同类型的可变变量,并且希望能够随意实例化它们,具体取决于早期计算的结果 . 但是, STT 的链接文档明确提到: 此monad变换器不应与包含多个答案的monad一起使用,例如list ...
  • 45 votes
     answers
     views

    ST Monad ==代码味道?

    我正在努力在Haskell中实现UCT算法,这需要大量的数据杂耍 . 在没有深入细节的情况下,它是一种模拟算法,其中,在每个"step,"搜索树中的叶节点基于某些统计属性被选择,在该叶子处构造新的子节点,并且对应于新叶子和它的所有祖先都会更新 . 鉴于所有这些杂耍,我并不是非常敏锐,无法弄清楚如何使整个搜索树成为一个不错的不可变数据结构 . 相反,我一直在玩 ST monad...
  • 5 votes
     answers
     views

    状态monad是否具有两个状态变量类型(in和out)仍然是monad?

    Haskell的状态monad State s a 迫使我在整个do块期间保持相同类型的 s . 但是因为状态monad实际上只是一个函数,如果我将它定义为 State i o a = State (i -> (o, a)) 怎么办? return 和 bind 函数看起来与标准状态monad中的函数完全相同,但是类型已更改: return :: a -> State st st...
  • 3 votes
     answers
     views

    在Haskell标记中生成唯一值

    为了生成x86汇编代码,我定义了一个名为 X86 的自定义类型: data X86 a = X86 { code :: String, counter :: Integer, value :: (X86 a -> a) } 此类型用于如下所示的标记 . 这样可以轻松编写用于生成if语句,for循环等的模板... generateCode :: X86 () generateCode = d...
  • 75 votes
     answers
     views

    斯卡拉兹州的monad例子

    我还没有看到很多scalaz state monad的例子 . 有this example但很难理解,似乎只有一个other question堆栈溢出 . 我已经玩了但我会欢迎其他的 . 此外,如果有人可以举例说明为什么 init , modify , put 和 gets 用于那将是很好的 . 编辑:here是一个令人敬畏的2小时状态monad演示文稿 .
  • 7 votes
     answers
     views

    状态转换与无形状态monad

    Scalaz State monad的modify具有以下签名: def modify[S](f: S => S): State[S, Unit] 这允许状态被相同类型的状态替换,当状态包括无形值(例如 Record ,其类型随着添加新字段而改变)时,该状态不能很好地工作 . 在这种情况下,我们需要的是: def modify[S, T](f: S => T): State[T, U...

热门问题