monads

    4熱度

    2回答

    我正在苦苦掙扎着榆樹缺乏monad。一個實現Elm狀態monad的庫(http://package.elm-lang.org/packages/folkertdev/elm-state/latest/State)對我有很大的幫助。 問題是,現在我遇到了交替嵌套Result和狀態類型的情況,當時我只想每個都有一個。 我試着用下面的簽名寫一個函數,但似乎不可能,因爲只有在評估外部狀態時纔會知道內部結果

    3熱度

    1回答

    我在寫一個函數,它需要一個謂詞p和一個列表。它 返回([value],[state])其中第一個列表包含通過p的元素,第二個包含不包含的元素。然而,當我運行 runState (myFunc even [1,2,3,4,5]) [] 我得到([2,4,5,3,1],[5,3,1]),其中失敗的元素被不正確地存儲在[value]。我相信這是由於get更新狀態和值,但我一直無法找到一種方法來更新狀

    2熱度

    1回答

    我只是哈斯克爾單子玩弄和我不斷收到,我似乎無法修復的錯誤。我的代碼段使用狀態Monad將字符串中的前兩個字符添加到一起,並將它們作爲狀態的一部分返回。我的「放」行不斷給我的錯誤: * Non type-variable argument in the constraint: MonadState [a] m (Use FlexibleContexts to permit this) *

    4熱度

    1回答

    當我這樣定義函數中ghci的: > :m Control.Monad > let f n = n+1 > let g = liftM f 他們工作得很好: > g $ Just 2 > Just 3 > g $ [1,2] > [2,3] 但是,當我定義文件相同的功能(probl.hs): import Control.Monad f :: Integer -> Intege

    2熱度

    0回答

    我正在嘗試使用IO和Maybe monads來製作一個簡單示例。該程序從DOM讀取一個節點並向其寫入一些innerHTML。 我掛斷了IO和Maybe的結合,例如IO (Maybe NodeList)。 如何在此設置下短路或發生錯誤? 我可以使用getOrElse來提取一個值或設置一個默認值,但是將默認值設置爲一個空數組並不會有所幫助。 import R from 'ramda'; import

    0熱度

    1回答

    類型構造函數: template< typename T > T*; 單位操作員 template< typename T > T* unit(T /*or T&*/ t) { return &t; } 綁定操作者 template< typename A, typename B > B* bind(A a, std::function<b*(a)> f) { return a ? f

    2熱度

    2回答

    今天我在玩>>=,試圖理解monad,並發現了一個有趣的模式。在處理列表monad時,>>=似乎表現得像concatMap。我四處搜尋,試圖找出任何相似之處,特別注意hackage的定義。 有些事情我想: [1, 2, 3] >>= (iter 5 id) => [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3] concatMap (iter 5 id) [1, 2, 3]=> [1

    2熱度

    2回答

    我剛剛意識到,函數具有Monad,Functor和Applicative的實例。 我最常做的,當我看到一些類型類實例我不明白,是寫一些良好的輸入表達式,看看它返回: 有人可以解釋這些情況?你通常會聽到關於List和Maybe的實例,這些實例現在對我來說很自然,但我不明白函數如何成爲函子或Monad。 編輯: 好吧,這是一個有效的良好的輸入表達式無法編譯: fmap (+) (+) 1 (+1) 1

    3熱度

    1回答

    序言 這是那些我認爲,有人已經解決了我的問題的問題之一,但我不知道去哪裏找。 問題 我要找攜帶的是這樣的單子堆棧的操作將無法進行類型檢查,除非它是完整的完全或不完全的想法MonadTransformer。 我的情況 我有一個單子與持有兆乏的狀態疊加。未能寫入此MVar將導致thread blocked indefinitely in an MVar異常。我可以檢查MVar本身,但將它交給另一個線程

    1熱度

    1回答

    內部的ExceptT String IO() 我有一個產生ReaderT像這樣一個功能的DO塊: type UDCEnv = (AWS.Env, Bool) uploadVersionFilesToCaches :: S3.BucketName -> FilePath -> [GitRepoNameAndVersion]