問題
私はちょうどあなたが発明したかもしれないモナドを調べています! チュートリアル、およびA Container: Multivalued Functionsというタイトルのセクションでは、(複素平方根および立方根の) 関数タイプは次のとおりです。
Complex Float -> [Complex Float]
バインドは次のように定義されます。
bind :: (Complex Double -> [Complex Double]) -> ([Complex Double] -> [Complex Double])
bind f x = concat (map f x)
--shortcut:
f * g = bind f . g
ユニットとリフトは次のとおりです。
unit x = [x]
lift f = unit . f
今、私は混乱しています.in関数はinf関数liftと同じですか?つまり、and関数の型は何ですか?fbindunitlift
逆説
また、私の推論では、奇妙なパラドックスに到達します。次のliftような関数を使用できる場合:
realRoot :: Double -> Double
realRoot x = sqrt(x)
それをモナドに持ち上げて、次の型になるようにします。
lift realRoot :: [Complex Double]
次のようなことはできませんか?
(lift realRoot * imaginaryRoot) -1
どこ
imaginaryRoot :: [Complex Double]
しかし、どうすれば複素数の実根を求めることができるでしょうか?
どんな助けでも大歓迎です!