monads

    9熱度

    2回答

    我在閱讀Purescript通過示例並介紹了讀者單元的部分。示例如下: createUser :: Reader Permissions (Maybe User) createUser = do permissions <- ask if hasPermission "admin" permissions then map Just newUser els

    0熱度

    1回答

    我正在創建一個將讀取二進制文件的Conduit。東西可能會出錯,所以我需要一個monad來處理一些錯誤;現在Maybe已經足夠了。 我想使用sourceFile,它要求管道monad是MonadResource,這是問題的關鍵。 我從the docs看到,例如, MaybeT m有一個實例,但它需要m已經是MonadResource;事實上,所有情況都是如此。由於我的理解有限,這聽起來像雞與雞蛋,

    4熱度

    2回答

    給出以下類型和功能,這意味着到CSV字段的字段解析爲一個字符串: type Parser resultType = ParsecT String() Identity resultType cell :: Parser String 我有實現以下功能: customCell :: String -> Parser res -> Parser res customCell typeName

    0熱度

    1回答

    如果我有,理解與列表類似 def getList: List[A] def doSomeStuff(a: A): List[B] for { a <- getList x <- doSomeStuff(a) } yield x 一個Scala和我通過它一步用的IntelliJ調試器,調試器是足夠聰明,不踏進List類的內部地圖/ flatMap實現。我可以檢查get

    1熱度

    3回答

    我正在實現一個函數來執行單次計算N次。我寫了下面的代碼。 performN :: Monad m => Int -> m t -> m [t] performN 0 m = return [] performN n m = do x1<- m x2<- if n == 1 then return [] else (m:performN (n-2) m) retur

    2熱度

    3回答

    我知道我可以使用函數單子來實現類似下面的一個結構(在這裏我重複使用多次調用的參數不明確引用它)之前執行轉換到輸入: compute_v0 :: String -> String compute_v0 = do x <- length -- (using the argument implicitly here) top <- head -- (and here) r

    -4熱度

    1回答

    爲什麼我能寫這樣的事: main :: IO() main = getLine >>= putStrLn 由於getLine :: IO String和putStrLn :: String -> IO String它似乎是這一行動的整體類型應該是IO String。爲什麼這樣編譯而不是給出類型錯誤?我能想出的唯一原因是在編譯時>> return()被添加到main的值的末尾。那麼這裏發生了什

    0熱度

    1回答

    我遇到cats/monads /理解問題。 請考慮下面的代碼片段: import cats._ import cats.implicits._ final case class My[T]() implicit val monadMy: Monad[My] = new Monad[My] { ... } // this compiles def test11[A, B](m: My[

    1熱度

    1回答

    剛剛被介紹給哈斯克爾的單子,並與>>碰到了一些障礙。 >>=對我來說很有意義,因爲我可以得到下面的出前奏曲: Prelude> Just 1 >>= (\ x -> Just (x+1)) Just 2 我的理解是,>>是一樣的綁定,但僅用於當函數是關於恆定的參數。但是,當我嘗試這樣做,在前奏: Prelude> Just 1 >> (\_ -> Just 10) <interactiv

    3熱度

    1回答

    考慮此程序: module test import Effects import Effect.StdIO (>>==) : Maybe a -> Lazy (a -> Maybe b) -> Maybe b (>>==) Nothing (Delay map) = Nothing (>>==) (Just x) (Delay map) = map x nothing : Str