在Haskell中动态导入模块
我正在构建一个基于Scotty的应用程序,并尝试导入和添加目录中包含的动态中间件列表 我不想硬编码我的中间件列表,但现在我正在使用一个在Haskell中动态导入模块,haskell,scotty,Haskell,Scotty,我正在构建一个基于Scotty的应用程序,并尝试导入和添加目录中包含的动态中间件列表 我不想硬编码我的中间件列表,但现在我正在使用一个Index.hs来公开所有目录中间件 假设我有一个Main.hs import Controllers.Index (endpoints) ... main :: IO () main = do port <- read <$> getEnv "PORT" scotty port $ do middleware log
Index.hs
来公开所有目录中间件
假设我有一个Main.hs
import Controllers.Index (endpoints)
...
main :: IO ()
main = do
port <- read <$> getEnv "PORT"
scotty port $ do
middleware logStdoutDev
endpoints
每个Controllers/*.hs
都包含一个中间件
摆脱控制器/Index.hs
的最佳方法是什么?
是否有一种方法可以从目录导入所有模块并获得我可以使用的列表?有点晚,但此软件包有助于从安装程序生成所需的导入,如注释中所示:
您可能可以使用cabal在配置时生成控制器.Index模块。您的意思是从
Setup.hs
生成Index.hs
文件?那很聪明。假设Haskell中没有任何东西可以让我动态导入模块,我想我是对的,那么?(此票证实际上似乎证实了这一点:)是的,您不能动态导入模块。我认为那张票的优先权很低,所以你不应该期望很快会有这样的事情发生。
module Controllers.Index
( endpoints ) where
import Controllers.Order (order)
import Controllers.User (user)
...
import Web.Scotty (ScottyM)
endpoints :: ScottyM ()
endpoints = order >> user >> ...