私は比較的新しいHaskellです。今私はリーダーモナドをより完全に理解しようとしています。それはその目的と使用方法がより明確になっているようです。しかし、ハスケルで:t readerのタイプを見ている間に私はreader :: MonadReader r m => (r -> a) -> m aを参照してください。この型制約は何を意味しますか? 私はエラー <interactive>:21:11
okamlにフリーモナドライブラリーを書き込もうとしていますが、これはhaskellのControl.Monad.Freeの後にありますが、hoistFreeの実装では一点に止まっています。 hoistFree :: Functor g => (forall a. f a -> g a) -> Free f b -> Free g b
hoistFree _ (Pure a) = Pure a
私はアルチョームのアイソーンのチュートリアルを働いている、と自分自身にこのスニペットをコード化されています: parseFoo (Object obj) = do
a <- case HM.lookup "a" obj of
Just x -> parseJSON x
Nothing -> fail "no field 'a'"
return a
は、私は(それが何をするか、実際に、または!)Haskellのrecursion-schemesパッケージから、この非常に抽象的再帰関数がどのように機能するかを理解しようとしています - this fileから:特に class Functor (Base t) => Corecursive t where
[...]
-- | A generalized postprom
以下の関数を1行で書き換えることはできますか? action :: NewTenant -> AppM (Either TenantCreationError Tenant)
action newTenant = (createTenant newTenant) >>= \case
Left x -> return $ Left x
Right y -> do
t