我正在尝试使用 Haskell 和 Framework Scotty 构建一个简单的博客。使用 Model.hs 我有:
data Post = Post
{ id :: Int
, tipo :: String
, titulo :: String
, conteudo :: String
} deriving (Show, Generic)
我已经使用 sqlite 创建了一个模式并填充了一些数据,现在我正在尝试在我的 Storage.hs 中使用此方法获取这些数据
selectPosts :: Sql.Connection -> IO [M.Post]
selectPosts conn =
Sql.query_ conn "select * from post" :: IO [M.Post]
我的意图是在我的 Main.hs 中获取 json 格式的数据:
instance ToJSON M.Post
instance FromJSON M.Post
main :: IO ()
main = do
putStrLn "Starting Server..."
scotty 3000 $ do
get "/" $ file "templates/index.html"
get "/posts" $ do
json posts where
posts = withTestConnection $ \conn -> do
S.selectPosts conn
但是我得到一个 IO [Model Post],我不知道如何将它呈现为 json,所以它不断收到这个错误:
No instance for (ToJSON (IO [Post])) arising from a use of ‘json’
我的项目在github上运行,只需使用 stack build 和 stack ghci 之后。在建筑物中,我已经收到此错误。