내 처리기에 해당하는 현재 경로를 얻고 싶습니다.Haskell Servant 현재 경로/URL 가져 오기 처리기에서
type ServerAPI =
"route01" :> Get '[HTML] Text
:<|> "route02" :> "subroute" :> Get '[HTML] Text
:<|> "route03" :> Get '[HTML] Text
그리고 여기에 몇 가지 핸들러됩니다 :
route1and2Handler :: Handler Text
route1and2Handler = do
route <- getCurrentRoute
addVisitCountForRouteToDatabaseOrSomethingOfThatSort...
return template
route3Handler :: Handler Text
route3Handler = return "Hello, I'm route 03"
그리고 내 서버 :
server :: Server ServerAPI
server = route1and2Handler :<|> route1and2Handler :<|> route3Handler
그래서, 기본적으로 내 route1and2Handler
몇 가지 방법이 있어야 여기에 단지 참조를 위해 내 서버의 모형입니다 현재 경로를 얻는 중. 내 핸들러에 요청 객체를 얻고 HasServer
예과 같이 구현하여 그에서 URL을 추출 시도했다 :
data FullRequest
instance HasServer a => HasServer (FullRequest :> a) where
type Server (FullRequest :> a) = Request -> Server a
route Proxy subserver request respond =
route (Proxy :: Proxy a) (subserver request) request respond
[편집] 난 그냥 옛날에 대한 API를보고있는 것을 발견했다 서번트의 버젼이며, 이제는 유효하지 않습니다. 새 route
은 route :: Proxy api -> Context context -> Delayed env (Server api) -> Router env
의 유형 서명이 있으며 실제로 여기에서 Request
을 얻는 방법을 모르겠습니다. 내 말을
`Server' is not a (visible) associated type of class `HasServer'
그리고 단지 결국 지적 : HasServer
인스턴스를 만들려고 할 때
그리고 route1and2Handler
유형 서명을 만드는 것보다
Request -> Handler Text
할 수 있지만,이 오류를 받고 있어요 목표는 Handler
에서 현재 경로를 얻는 것입니다. 데이터베이스의 경로에 대한 방문수를 추가하는 것은 예제 목적에 불과합니다. 나는 방문이나 그 종류의 것을 계산하는 더 좋은 방법에 관심이 없다.
실제 타입 패밀리는'ServerT'이며,'Server'는'Handler' 모나드를 사용하는'ServerT'의 편리한 동의어입니다. –