我有這個簡單的 「箭」:意外的結果當上箭頭一個Monoid的應用
main = do
let
-- arr :: (Arrow a) => (b -> c) -> a b c
-- (>>>) :: Category cat => cat a b -> cat b c -> cat a c
-- (<+>) :: ArrowPlus a => a b c -> a b c -> a b c
-- infixr 5 <+>
-- infixr 1 >>>
-- runKleisli :: Kleisli m a b -> a -> m b
prepend x = arr (x ++)
append x = arr (++ x)
xform = (prepend "<") >>> (append ">") <+> (prepend "{") >>> (append "}")
xs = ["foobar"] >>= (runKleisli xform)
mapM_ putStrLn xs
的<+>
回報:
<foobar>}
{<foobar}
,如果我更換xform
有:
xform = ((prepend "<") >>> (append ">")) <+> ((prepend "{") >>> (append "}"))
我收到:
<foobar>
{foobar}
爲什麼我會得到這2個結果?即使在infixr
s(作爲代碼中的註釋)也沒有什麼幫助。
[這可能會讓你的解決方案](http://stackoverflow.com/questions/40331179/how-to-automatically-parenthesize-arbitrary-haskell-expressions)。 – Alec