monads

    2熱度

    3回答

    使用Future.traverse的Im是執行的順序保證。我的功能fn必須在下一個元素運行之前調用並完成未來。 val xs = Seq[T] ??? def fn(t: T): Future[Unit] = ??? Future.traverse(xs)(fn) 感謝,

    0熱度

    4回答

    下面是an answer regarding memoization的代碼,顯示了狀態monad中使用的memoization函數,其中狀態用傳遞的函數的結果更新,如果密鑰尚未在地圖中。 type MyMemo a b = State (Map.Map a b) b myMemo :: Ord a => (a -> MyMemo a b) -> a -> MyMemo a b myMemo

    0熱度

    1回答

    我想弄清楚一種方法來在TypeScript中對monadic庫進行優化。雖然monad本身的實現令人愉快,但它的使用看起來像熟悉的回調地獄。 我想知道是否有辦法劫持async/await或yield/for..of的現有monadic語法糖,但我必須承認我在連接點時遇到了一些麻煩。是否有可能在既不是Promise也不是Iterable的東西上使用這些構造,並且與由反應組件構成的continuati

    0熱度

    1回答

    以下代碼中的sum()將已經獲得a,b,c和10的總和,即使a < b(它將打印「We screwed up!」以表示表達式失敗的條件)。我試圖改變Where<T>(...)擴展方法 public static IO<T> Where<T>(this IO<T> t, Func<T, bool> foo) { return() => (foo(t()) ? t : Combine(()

    3熱度

    1回答

    我一直在嘗試掌握IO monad一段時間,它是有道理的。如果我沒有弄錯,我們的目標是將副作用和實際執行的描述分開。正如在下面的例子中,Scala有一種方法來獲得一個不引人注意的環境變量。出現了兩個問題。 問題1:這是一個指涉TRANSPARANT 問題2:如何正確(單位/財產依據)測試呢?檢查相等是不可能的,因爲它會檢查內存引用,並且不可能檢查內部函數,因爲如果我沒有弄錯,函數比較是不可能的。但是

    2熱度

    1回答

    我試圖安裝一個應用程序Termite - Util但我在與線得到這個錯誤14 newtype CE m a = CE {unCE :: m a} deriving (Monad) 錯誤說: ContextError.hs:14:45 : 沒有適用於(適用(CE m)) 由數據類型聲明的「派生」子句產生 可能的修正: 使用獨立的「派生實例」聲明 因此您可以sp ecify自己的實例上下文 當導出

    2熱度

    2回答

    我使用閱讀器的單子寫了一些單子代碼,我不知道是否有任何方式使用DO-符號寫: m = Map.fromList [("This","is"), ("is","the"), ("the","secret")] f x m = fromMaybe "default" $ Map.lookup x m r :: String -> Reader (Map String String) String

    1熱度

    1回答

    在Haskell中,如何去寫入任意大量的文件? 舉個例子,假設我想把a到z這兩個字母放在一個文件名裏面,這個文件的內容是字母。最初的嘗試是做到以下幾點: main :: IO() main = do let letter = map (:"") ['a'..'z'] zipWith writeFile letter letter 這將產生以下錯誤: Couldn't

    2熱度

    1回答

    我以前用過Kleisli,當你計算傳遞依賴到它的計算時,monad會返回我需要的值。 現在我正在使用Reader,我發現當我運行該程序時,評估結果將返回Id。 爲什麼? 此外,探索Id我遇到的init函數展開計算值的不同選項。使用「combinator」是否好?我需要從Reader唯一的東西是沒有任何包裝的產值。 由於

    1熱度

    1回答

    使用optparse-applicative,我想要一個可選參數,該參數應該是文件的路徑,或者未指定時,stdin。這裏明顯的選擇是使這個參數類型爲IO Handle,並且在使用openFile時傳遞參數。這是我目前有: module Main where import Data.Semigroup ((<>)) import Options.Applicative import Syst