no happy
Christian Maeder
maeder at tzi.de
Fri Nov 3 11:46:40 EST 2006
Bulat Ziganshin schrieb:
> may be this will be useful:
>
> -- This "equalizer" routine required because MArray interface was changed in GHC 6.6
> #if defined(__GLASGOW_HASKELL__) && (__GLASGOW_HASKELL__ >= 605)
> getMBounds arr = getBounds arr
> #else
> getMBounds arr = return (bounds arr)
> #endif
>
> usage example:
>
> putMArrayWith write h arr = do bounds <- getMBounds arr
> loop 0 (rangeSize(bounds)-1)
> (\i -> unsafeRead arr i >>= write h)
>
Hi Bulat, thanks for your answer, but the code in LALR.lhs:626:34
(happy-1.15) lacks a monad for getBounds (or I'm blind):
> countConflicts :: ActionTable -> (Array Int (Int,Int), (Int,Int))
> countConflicts action
> = (conflictArray, foldr (\(a,b) (c,d) -> (a+c, b+d)) (0,0) conflictList)
>
> where
>
> conflictArray = listArray (bounds action) conflictList ---- <<<<
> conflictList = map countConflictsState (assocs action)
>
> countConflictsState (state, actions)
> = foldr countMultiples (0,0) (elems actions)
> where
> countMultiples (LR'Multiple (_:_) (LR'Shift{})) (sr,rr)
> = (sr + 1, rr)
> countMultiples (LR'Multiple (_:_) (LR'Reduce{})) (sr,rr)
> = (sr, rr + 1)
> countMultiples (LR'Multiple as a) (sr,rr)
> = error "bad conflict representation"
> countMultiples _ c = c
More information about the Glasgow-haskell-bugs
mailing list