monadfix

    10熱度

    1回答

    我正在爲Ocaml中的haskell-like標記做camlp4擴展,並試圖弄清楚GHC如何編譯遞歸do-bindings(使用-XDoRec啓用)。 我想知道是否有可能以嚴格的語言(如Ocaml/F#/ SML/...)存在monadic fixpoint combinator? 如果是,它怎麼樣?它會非常有用嗎?

    6熱度

    2回答

    一個簡單的問題,我希望:binary包定義了兩種類型,Get and Put。前者本質上是一個國家單子,而後者本質上是一個作家。狀態和作者都有合理的MonadFix實例,所以我預計Get和Put也會。 Get確實。 Put沒有。那麼,是否有可能爲Put定義合適的MonadFix實例(真的用於PutM)? 一個更普遍的問題是:通常如何驗證類型類實例實際上是否滿足該類型類的定律?

    16熱度

    1回答

    我在說我猜測是Data.Map錯誤的東西絆倒了,但也很可能在我的Haskell知識的錯誤。希望有人能澄清這是:) 請參考this gist。我將一個循環鏈表結構序列化爲一個字節流。對於任何給定節點,該形式爲: data Node = Node { val :: Word8 , next :: Node } 我希望它被序列化爲一對字節:表示val第一字節,並且表示在

    13熱度

    2回答

    問題主要在標題中。這似乎是mfix可以爲任何一元計算定義,即使它可能發散: mfix :: (a -> m a) -> m a mfix f = fix (join . liftM f) 什麼是錯的這種結構?此外,爲什麼Monad和MonadFix類型類是分開的(即哪些類型的實例是Monad而不是MonadFix)?

    14熱度

    1回答

    我們如何證明the continuation monad沒有有效的MonadFix實例?

    1熱度

    1回答

    使用ghc v8.0.1,使用-O2標誌編譯。 我遇到了RecursiveDo(mdo)的問題。有兩個稍微不同的函數可以產生相同的輸出,但它們不會。 下面的函數產生正確輸出: proc2 :: Assembler() proc2 = mdo set (R 0) (I 0x5a5a) let r = (R 0) let bits = (I 2) let co

    2熱度

    3回答

    更新:我已經添加了an answer,它描述了我的最終解決方案(提示:單個的Expr數據類型是不夠的)。 我writing一點點表達式語言的評估,但是我卡上的LetRec結構。 這是語言: type Var = String type Binds = [(Var, Expr)] data Expr = Var Var | Lam Var Expr | App