From babd7903b94f3e6e2c62598ab90e754d80fafe1c Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Tue, 10 Jan 2012 13:24:20 +0200 Subject: [PATCH] Setup for overlap routing --- yesod-routes/Yesod/Routes/Overlap.hs | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 yesod-routes/Yesod/Routes/Overlap.hs diff --git a/yesod-routes/Yesod/Routes/Overlap.hs b/yesod-routes/Yesod/Routes/Overlap.hs new file mode 100644 index 00000000..002c6cc9 --- /dev/null +++ b/yesod-routes/Yesod/Routes/Overlap.hs @@ -0,0 +1,41 @@ +-- | Check for overlapping routes. +module Yesod.Routes.Overlap + ( findOverlaps + , findOverlapNames + ) where + +import Yesod.Routes.TH.Types +import Control.Arrow ((***)) + +findOverlaps :: [Resource t] -> [(Resource t, Resource t)] +findOverlaps = undefined + +findOverlapNames :: [Resource t] -> [(String, String)] +findOverlapNames = map (resourceName *** resourceName) . findOverlaps + +{- +-- n^2, should be a way to speed it up +findOverlaps :: [Resource a] -> [[Resource a]] +findOverlaps = go . map justPieces + where + justPieces :: Resource a -> ([Piece a], Resource a) + justPieces r@(Resource _ ps _) = (ps, r) + + go [] = [] + go (x:xs) = mapMaybe (mOverlap x) xs ++ go xs + + mOverlap :: ([Piece a], Resource a) -> ([Piece a], Resource a) -> + Maybe [Resource a] + mOverlap _ _ = Nothing + {- FIXME mOverlap + mOverlap (Static x:xs, xr) (Static y:ys, yr) + | x == y = mOverlap (xs, xr) (ys, yr) + | otherwise = Nothing + mOverlap (MultiPiece _:_, xr) (_, yr) = Just (xr, yr) + mOverlap (_, xr) (MultiPiece _:_, yr) = Just (xr, yr) + mOverlap ([], xr) ([], yr) = Just (xr, yr) + mOverlap ([], _) (_, _) = Nothing + mOverlap (_, _) ([], _) = Nothing + mOverlap (_:xs, xr) (_:ys, yr) = mOverlap (xs, xr) (ys, yr) + -} +-}