ask
によってどのようなパラメータが得られますか? よく見ることができますask >>= f
意味はask >>= f = (\k -> f (ask k) k)
ですので、環境からkを得ることができなければなりません。
ただし、ドキュメントには、ask :: m r
と記載されています。 どこが間違っていますか?Haskell、ask of parameters
答えて
それはReader
モナドです。最終的に最良の答えはちょうどこのように定義することができ、その実装、バージョン、最も簡単なことで(無モナド変圧器、ノークラス)を研究することである。
newtype Reader r a = Reader { runReader :: r -> a }
これはnewtype
宣言ですので、Reader r a
は単に「再ラベルです機能タイプr -> a
の(いわば)。 ask
は、このように定義されています
ask :: Reader r r
ask = Reader (\r -> r)
ask
だけで、独自の引数を返す-the機能再ラベル付け恒等関数であることを意味しています。我々はそれに値を供給するためにrunReader
操作を使用している場合我々は、これを見ることができます:
Reader
が
Functor
、
Applicative
と
Monad
のためのインスタンスを持っているという事実から来ていません
ghci> runReader ask 5
5
ghci> runReader ask "Hello world!"
"Hello world!"
instance Functor (Reader r) where
fmap f (Reader g) =
-- A `Reader` that applies `f` to the original `Reader`'s results
Reader (\r -> f (g r))
instance Applicative (Reader r) where
pure a =
-- A `Reader` that ignores its `r` argument and just produces
-- a fixed value.
Reader (\_ -> a)
Reader ff <*> Reader fa =
-- A `Reader` that "combines" two `Reader`s by feeding the same
-- `r` value to both, and then combining their results
Reader (\r -> ff r (fa r))
instance Monad (Reader r) where
return = pure
Reader fa >>= k =
-- A `Reader` that feeds the same `r` both to the original one
-- and to the one computed by the `k` function
Reader (\r -> k (fa r) r)
あなたはこれらを勉強すれば、あなたは何Reader
ことについてですあなたがにラッパーr -> a
機能を適用するプログラムのポイントを遅らせていることがわかります。通常、タイプがr -> a
で、タイプがa
の場合は、タイプr
の引数を指定する必要があります。 Reader
クラスインスタンスでは、代わりにa
で動作するために使用される関数を提供し、最後にr
を指定することができます。
ReaderT
タイプとMonadReader
クラス(これはask :: MonadReader r m => m r
メソッドを持っています)はこれよりも高度なバージョンです。
それは本当であるべきである: 'ask = f = ' –
タイプm a
の値は、m
がMonadである場合、「モナディック・アクション」と考えることができます。したがって、ask
はパラメータをとらないので、バインダー(>>=
)を使用してReaderモナドから値を抽出することができます。 Control.Monad.Trans.Reader
でReaderT
ためask
の定義で
ルック:
-- | Fetch the value of the environment.
ask :: (Monad m) => ReaderT r m r
ask = ReaderT return
ReaderT
はタイプr -> m a
の値が含まれているだけで、データコンストラクタであるので、ReaderT return
は機能が含まれているタイプReaderT r m r
の値であり、return
(モナドのm
)。
つまり、ask
は、Reader
の内部に格納されている値を抽出する「モナドアクション」です。リーダーのため>>=
の定義を使用して
(ReaderT return) >>= f
ある
ask >>= f
、我々が得る:
ReaderT $ \ r -> do
a <- return r
runReaderT (f a) r
それとも
に減少しReaderT $ \ r -> do
a <- runReaderT (ReaderT return) r
runReaderT (f a) r
を
したがって、次のアクションを決定するために格納された値を渡し、次のアクションが前と同じように値を渡すようにします。
(これは明確ではなかった場合は、おそらく読者のチュートリアルを探してください)
rの意味は何ですか? –
@HaskellFun '\ r - > ... 'という構文が' r'パラメータの意味を聞いていますか? –
何を表していますか?私はこの構文を知っている、ちょうどラムダ:) –
- 1. Alexa ASKラムダバグ
- 2. Flask-askラズベリーパイ
- 3. Alexa sdk ask prompt
- 4. Systemd service ask password
- 5. Python loop ask
- 6. Axios get request parameters
- 7. 絶望:Haskell School of Expressionのインストール方法graphics pkg、Windows XP、7
- 8. Tensorflow tf.map_fn parameters
- 9. Crystal Report askデータベースパラメータログインC#
- 10. Python:Loop Parameters
- 11. model.addAttribute()parameters
- 12. Addthis parameters doubt
- 13. CodeType get generic parameters
- 14. $ resouce query with parameters
- 15. PHP array_map trim + parameters
- 16. React Router Query Parameters
- 17. [OAMutableURLRequest parameters]のクラッシュ
- 18. Junit 4の@parameters
- 19. $ configdataとparameters
- 20. AD_NewUser parameters Powershellエラー
- 21. JQuery、Passing Parameters
- 22. mvc httppost href parameters
- 23. Javascript submit.Jsp url parameters
- 24. ObjectDataSource.Select With Parametersタイムアウト
- 25. sammyjs optional parameters
- 26. C#Process.Start parameters truncated
- 27. MarkupExtension with binding parameters
- 28. Python argparse:name parameters
- 29. Esper count with parameters
- 30. Encog Simulated Annealing Parameters
"ask >> = f =(\ k - > f(ask k)k)' "これは間違っています。 – PyRulez
だから私は平等を修正してください。私はそれをここで見つけたhttps://www.haskell.org/wiki/df4e1f5471fe2a2Monads_as_containers –
他の答えは等価を修正する必要があります。 – PyRulez