小编hhe*_*sto的帖子

Haskell Persistent上的CRUD模式

这是我第二次尝试学习Haskell,而我一直听到的一件事就是不要重复自己(其他语言也是如此).

无论如何......我正在尝试实现一个博客并发现需要在数据库上实现CRUD操作,但是当我为评论,帖子和用户实现CRUD时,在我看来,我只是在重复自己.

问题是我看不出怎么不重复自己.

{-# LANGUAGE EmptyDataDecls             #-}
{-# LANGUAGE FlexibleContexts           #-}
{-# LANGUAGE GADTs                      #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses      #-}
{-# LANGUAGE OverloadedStrings          #-}
{-# LANGUAGE QuasiQuotes                #-}
{-# LANGUAGE TemplateHaskell            #-}
{-# LANGUAGE TypeFamilies               #-}

module Model where

import Control.Monad.IO.Class  (liftIO)
import Control.Monad.Logger    (runStderrLoggingT)
import Database.Persist
import Database.Persist.Postgresql
import Database.Persist.TH
import Data.Time
import Data.Int

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Users
    email String
    password String
    alias String
    image_url String
    show_email Bool
    UniqueEmail email
    date UTCTime default=CURRENT_TIMESTAMP …
Run Code Online (Sandbox Code Playgroud)

database haskell persistent yesod

3
推荐指数
1
解决办法
591
查看次数

在 haskell 中,如何与“IO ()”的标准输入进行交互?

这显示了我想做的事情的精神,它几乎可以工作(只是不在我当前的 nix 设置内):

echo :: IO ()
echo = getLine >>= putStrLn

testEcho :: IO ()
testEcho = do
  (Just stdin_hdl, Just stdout_hdl, m_stderr_hdl, p_hdl)
    <- createProcess $
         (shell ("nix run .#echo"))
           { std_in = CreatePipe
           , std_out = CreatePipe
           }
  hPutStrLn stdin_hdl "Hello, echo!"
  hClose stdin_hdl
  !response <- hGetContents stdout_hdl
  cleanupProcess (Just stdin_hdl, Just stdout_hdl, m_stderr_hdl, p_hdl)
  if response == "Hello, echo!" then
    putStrLn "Success!"
  else error "Failure"
Run Code Online (Sandbox Code Playgroud)

基本上我想要类似的东西createProcess,但有一种类型createProcess :: IO () -> -> IO (Maybe …

testing stdin haskell

2
推荐指数
1
解决办法
183
查看次数

标签 统计

haskell ×2

database ×1

persistent ×1

stdin ×1

testing ×1

yesod ×1