私はHaskellのd3jsライブラリを読んでされています:Haskellでは `>>>`と `>> =`はどのように動作しますか?
これはHaskellのボックスを定義するコードです:
box :: Selector -> (Double,Double) -> St (Var' Selection)
box parent (w,h) = do
assign
$ ((d3Root
>>> select parent
>>> func "append" [PText "svg"]
>>> width w
>>> height h
>>> style "background" "#eef") :: Chain() Selection)
コードが実際にd3.jsコードでbox
機能を使用してエクスポートすると、このよう>>=
演算子を使用しています:
import Control.Monad
import qualified Data.Text as T
import D3JS
test :: Int -> IO()
test n = T.writeFile "generated.js" $ reify (box "#div1" (300,300) >>= bars n 300 (Data1D [100,20,80,60,120]))
この不評のようにされるのを避けるために、矢印の質問:How to use arrow operators in haskell タイプシグネチャやその他の基本情報はどこにありますか? 私が多くを学ぶことができるリソースがある:これはarrow可能性がありますが、私はそれをインポートしたところ、私は表示されません
最初のものを見つけるのは簡単だったが、答えは混乱した:
*Main Lib> :t ($)
($) :: (a -> b) -> a -> b
私はf $ a b c = f ((a b) c)
f a b c = (((f a) b) c
しばらくプレリュードが
>>=
含むモナドのための同様の応答を与えることがわかりました。私の場合、IOモナドかもしれない。それは危険で
*Main Lib> :t (>>>)
<interactive>:1:1:
Not in scope: ‘>>>’
Perhaps you meant one of these:
‘>>’ (imported from Prelude), ‘>>=’ (imported from Prelude)
最後にきれい不可欠になりますので、またはd3js文はモナドSt()
*Main Lib> :t (>>=)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
最後のものは残念である...まったく表示されませんすぐにあまりにも多くの質問を束ねる。誰かがこのタイプの署名を説明できますか?特に最後の項目: - ここにインポートされた作品は、Control.Category
からである - そしてそれは射の左から右への構図を示し@deltaとして
box :: Selector -> (Double,Double) -> St (Var' Selection)
https://www.haskell.org/hoogle/ – delta
'>>>'は実際に 'Control.Category'で定義されています。 ( 'Category'は' Arrow'のスーパークラスです。) – chepner
あなたの最後の質問について - 私は、あなたがそれについて何を理解しているのか、そして何を問題にしているのかという質問に答えるようお願いします。あなたはそれぞれのタイプの定義を見ましたか? – epsilonhalbe