free-monad

    2熱度

    1回答

    我一直在玩免費的Monad of Cats。我已經寫了一個DSL來處理CSV記錄。原始操作是處理CSV記錄,並且我自己編寫了一個幫助程序sequence和map2函數用於processCSVRecords操作。我希望case類的返回類型是泛型類型R。以下是我正在使用的代碼。 import cats.data.Coproduct import cats.free.Free.inject impo

    3熱度

    1回答

    修復數據類型在this article關於免費單子Haskell中,我們給出了通過定義一個玩具的數據類型: data Toy b next = Output b next | Bell next | Done 修復的定義如下: data Fix f = Fix (f (Fix f)) 它允許巢通過保留普通型玩具表達式: Fix (Output 'A' (Fix

    2熱度

    1回答

    我想表達F#自由單體的教會編碼。 Free是專門針對特定仿函數的,Effect。 我可以寫出return_ : 'T -> Free<'T>和bind: ('T -> Free<'U>) -> Free<'T> -> Free<'U>沒有任何問題。 我的實施草圖如下。 type Effect<'T> = GetStr of (string -> 'T) | PutStr of

    2熱度

    1回答

    我有兩個DSL - EmployeeAction和ContactAction。這裏是我的特質(操作) 完整的要點是:link sealed trait EmployeeAction[R] case class GetEmployee(id: Long) extends EmployeeAction[Either[Error, Employee]] sealed trait ContactAc

    0熱度

    1回答

    我在學習如何使用FreeMonads來爲我的服務實現解釋器。 假設我有 sealed trait ServiceAction[T] extends Product with Serializable case class ConsumeCommand(cmd: AccruePoints) extends ServiceAction[AccruePointModel] case class Cr

    3熱度

    1回答

    在Monad.Reader Issue 19 Haskell的遊離T和協程型之間的關係,在「協程管道」的文章中,筆者定義了一個通用Coroutine類型: newtype Coroutine f m a = Coroutine { resume :: m (Either (f (Coroutine f m a)) a) } 我注意到,這種類型是非常相似的FreeT類型從fr

    3熱度

    2回答

    我想開始我的項目中使用免費的單子,我掙扎,使其優雅。 比方說,我有兩個上下文(在現實中我有更多) - Receipt和User - 都有一個數據庫的操作,我想保持自己的獨立口譯員,並在最後時刻撰寫他們。 爲此,我需要爲每個操作定義不同的操作,並使用Coproduct將它們合併爲一個類型。 這是我在Google上搜尋和閱讀的天: // Receipts sealed trait ReceiptOp

    4熱度

    1回答

    我想了解免費單子。所以在教程的幫助下,我寫了一個玩具的例子,現在我不明白它爲什麼編譯。這裏是: import cats.free.Free import cats.instances.all._ import cats.~> trait Operation[+A] case class Print(s: String) extends Operation[Unit] case cl

    0熱度

    1回答

    我一直花時間最近掌握FP概念,尤其是免費的monad。我認爲我很瞭解自由單體背後的想法,但出現了一個問題。 我一直在使用Doobie建立在免費單子之上。對我來說,將不同的代數組合起來(包括副產品),包括doobie是有意義的。在測試代​​數時,人們通常會創建一個測試解釋器。但對於像Doobie這樣的現有庫(代數有點大),我是否需要自己創建一個測試解釋器?對我而言,在這一點上使用免費的monad提供

    1熱度

    1回答

    在purescript-free包,有一個代碼示例定義這個解釋: teletypeN :: forall eff. NaturalTransformation TeletypeF (Eff (console :: CONSOLE | eff)) teletypeN (PutStrLn s a) = const a <$> log s teletypeN (GetLine k) = pure (