无法在Yesod Import.hs中找到与导入相关的类型

时间:2017-04-19 15:13:29

标签: haskell yesod

我已经放入了Import.hs

import qualified Database.Esqueleto as E

但是在我的Handler文件中我有

import Import

但它无法找到E

module Handler.MyProfile where

import Import


getMyProfileR :: Handler Html
getMyProfileR = do
  now <- liftIO getCurrentTime
  wordList <- (runDB $ E.select $ E.from $ \v -> do
                  where_ (v ^. VocabularyDate E.<. val now)
                  return v)
  defaultLayout $ do
    $(widgetFile "myprofile")

1 个答案:

答案 0 :(得分:2)

那是不可能的。它会破坏合格导入的主要目的:限定符前缀告诉你某些东西来自哪里。如果您的代码中有E.<.,那么读者希望能够看到它的来源!

您有两种选择:

  • import qualified Database.Esqueleto as E直接放在Handler.MyProfile中。这通常是最好的解决方案 - 虽然它会在每个源文件的顶部导致一些笨重的标题,但优点是可以立即看到所有内容的来源。是的,它违反了DRY,但我认为在这种情况下它是合理的。
  • 为esqueleto的东西制作一个专用的“导入模块”。并且,如果有必要,可以使用任何其他import-qualifier前缀。

    module Import.Esqueleto where -- package-local, hidden module
    import Database.Esqueleto
    import Database.Esqueleto....
    
    module Handler.MyProfile where
    import qualified Import.Esqueleto as E