在Haskell中动态导入模块

在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

我正在构建一个基于Scotty的应用程序,并尝试导入和添加目录中包含的动态中间件列表

我不想硬编码我的中间件列表,但现在我正在使用一个
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 >> ...