Uważam, że pierwszeństwo i powiązanie jest dla mnie dużą przeszkodą w zrozumieniu, co gramatyka stara się wyrazić na pierwszy rzut oka do kodu haskell.Pierwszeństwo Haskell: Lambda i operator
Na przykład
blockyPlain :: Monad m => m t -> m t1 -> m (t, t1)
blockyPlain xs ys = xs >>= \x -> ys >>= \y -> return (x, y)
przez eksperyment, w końcu dostał to znaczy,
blockyPlain xs ys = xs >>= (\x -> (ys >>= (\y -> return (x, y))))
zamiast
blockyPlain xs ys = xs >>= (\x -> ys) >>= (\y -> return (x, y))
Który działa jako:
*Main> blockyPlain [1,2,3] [4,5,6]
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
Mogę uzyskać informacje od ghci dla (>> =) jako operator, (infixl 1 >> =).
Ale nie ma informacji dla -> ponieważ nie jest operatorem.
Czy ktoś z was mógłby podać wzmiankę o tym, aby ułatwić zrozumienie tego gramatyka?
Sieć [Haskell Report] (http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-220003) jest definitywnym odwołaniem do składni Haskella, chociaż być może gramatyka BNF jest nieco niskiego poziomu dla pytania, którym jesteś pytając ...? –