"モナドは、プログラマが順次ビルディングブロックを使用して計算を構築することを可能にする"ので、いくつかの計算を組み合わせることができます。この場合、次のコードを実行できない理由は何ですか? import Control.Monad.Trans.State
gt :: State String String
gt = do
name <- get
putStrLn "HI
モナド・トランスを学んでいますが、リフトを使う必要があるときは混乱しています。 次のコードがあるとします(これは面白いことではありません。デモンストレーションでは最も簡単なコードです)。 foo :: Int -> State Int Int
foo x = do
(`runContT` pure) $ do
callCC $ \exit -> do
when (
私はハスケルには新しく、おそらく本当に愚かな質問をしています。 は、私が実行するには、次のコードを取得しよう: asdf :: Maybe a -> Maybe a
asdf k = do
return $ case k of
Nothing -> Nothing
Just x -> Just x
私はリターンが非感があるだけでやるということ、これは
bind関数(>>=)が署名を有する: m a -> (a -> m b) -> m b
しかし、Iシグネチャを持つ関数をしたい: m (t a) -> (a -> m (t b)) -> m (t b)
具体的には、私は整数与えられた機能を持っている、それがIO内に整数のリストを返します。 f :: Int -> IO [Int]
ですが、IO of list of Integers
いくつかのモナドのコンテキストでラップすることになっている「戻る」: *Main> :i return
class Applicative m => Monad (m :: * -> *) where
...
return :: a -> m a
...
-- Defined in ‘GHC.Base’
私は「何も返さない」の種類が何であるかをGHC