2 GeneralizedNewtypeDeriving
6 module Network.HTTP.Lucu.Router
11 import Control.Applicative
12 import Control.Category
14 import Control.Arrow.ArrowList
15 import Control.Arrow.ArrowKleisli
16 import Control.Arrow.List
17 import Control.Monad.IO.Class
18 import Control.Monad.Unicode
19 import Prelude.Unicode
22 newtype MonadIO m ⇒ Router m α β
24 unRouter ∷ ListTArrow m α β
37 runRouter ∷ (Applicative m, MonadIO m) ⇒ Router m α β → α → m (Maybe β)
38 {-# INLINEABLE runRouter #-}
39 runRouter = ((optional' =≪) ∘) ∘ runListTArrow ∘ unRouter
41 optional' ∷ Applicative f ⇒ [β] → f (Maybe β)
42 {-# INLINE optional' #-}
43 optional' [] = pure Nothing
44 optional' (x:_) = pure (Just x)