我正在尝试跟随Yesod的烹饪书籍进行博客.我改变了一些东西,比如切换到PostgreSQL数据库,添加一个用于GoogleEmail身份验证的链接,以及将一些莎士比亚模板移动到单独的文件中.
我的问题是,当我运行应用程序并尝试进行身份验证时,我会收到一个TlsNotSupported
异常,我不知道是什么导致它或如何查找.我在一个单独的应用程序中使用了两种形式的身份验证,两者都运行良好.
我的代码如下.任何帮助将不胜感激.
{-# LANGUAGE OverloadedStrings, TypeFamilies, QuasiQuotes,
TemplateHaskell, GADTs, FlexibleContexts,
MultiParamTypeClasses, DeriveDataTypeable #-}
import Yesod
import Yesod.Auth
import Yesod.Form.Nic (YesodNic, nicHtmlField)
import Yesod.Auth.BrowserId (authBrowserId, def)
import Yesod.Auth.GoogleEmail (authGoogleEmail)
import Data.Text (Text)
import Network.HTTP.Client (defaultManagerSettings)
import Network.HTTP.Conduit (Manager, newManager)
import Database.Persist.Postgresql
( ConnectionString, ConnectionPool, SqlPersistT, runSqlPool, runMigration
, withPostgresqlPool, runSqlPersistMPool
)
import Data.Time (UTCTime, getCurrentTime)
import Control.Applicative ((<$>), (<*>), pure)
import Data.Typeable (Typeable)
import Text.Hamlet (hamletFile)
import Text.Lucius (luciusFile)
share [mkPersist sqlOnlySettings, mkMigrate "migrateAll"]
[persistLowerCase|
User …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序,应该可以模拟许多用轮盘赌尝试鞅投注系统的实例.我想main
提出一个参数,给出要执行的测试次数,多次执行测试,然后打印获胜次数除以测试总次数.我的问题是,我没有最终列出Bool
我可以过滤来计算成功的列表,而是有一个列表,IO Bool
我不明白我如何过滤它.
这是源代码:
-- file: Martingale.hs
-- a program to simulate the martingale doubling system
import System.Random (randomR, newStdGen, StdGen)
import System.Environment (getArgs)
red = [1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36]
martingale :: IO StdGen -> IO Bool
martingale ioGen = do
gen <- ioGen
return $ martingale' 1 0 gen
martingale' :: Real a => a -> a -> StdGen -> Bool
martingale' bet acc gen
| acc >= 5 = True
| acc <= -100 = False …
Run Code Online (Sandbox Code Playgroud) 我想将Seshat(一种手写数学表达式解析器)用于我正在处理的项目,但我在理解如何为程序提供正确的输入、InkML 或 SCG Ink 文件时遇到了一些麻烦。
我已经仔细查看了此处存在的在线示例,我看到他们从应用了此 JS 库的 HTML Canvas 字段中获取了一个 Javascript 笔划信息数组,但我不知道该数组之后会发生什么被发布到他们的服务器。
我已经阅读了SCG Ink 规范,我认为将数组解析为格式可能相对容易,但我希望有一些明显的我遗漏的东西会使这变得微不足道。任何帮助将不胜感激。
我正在为Yesod中的资源编写REST API.我有一个POST方法应该尝试创建给定的资源,如果成功返回201和新创建的资源的ID.例如,
postResourceR :: Handler String
postResourceR = do
id <- runDB $ insert Resource
sendResponseStatus status201 id -- DOES NOT COMPILE
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误,这很简单:
No instance for (ToTypedContent (Key Resource))
arising from use of 'sendResponseStatus'
Run Code Online (Sandbox Code Playgroud)
我知道我想要的东西ToTypedContent
,但我找不到任何方法从Key
Database.Persist.Class中获取它.任何帮助将不胜感激.
编辑:
这是实际资源的定义:
Notification
title Text
content Text
icon Text Maybe
action Text Maybe
created UTCTime
updated UTCTime
deriving Show
Run Code Online (Sandbox Code Playgroud) 我对如何在自定义数据类型中使用csv-conduit感到很困惑。我想要一排这样的库存数据:
Date,Open,High,Low,Close,Volume,Adj Close
2017-02-10,2312.27002,2319.22998,2311.100098,2316.100098,3475020000,2316.100098
Run Code Online (Sandbox Code Playgroud)
并将其解析为StockInfo
我在下面的MWE中声明的类型。我从我需要让我的文档收集StockInfo
的一个实例FromNamedRecord
,ToNamedRecord
以及CSV ByteString
。我相信我在前两个方面都这样做了,但是我不明白如何实现的必要方法CSV ByteString
。任何帮助将不胜感激。
MWE:
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
module Lib
( readStocks
) where
import Data.ByteString
import Data.Conduit
import Data.Conduit.Binary
import Data.Conduit.List as CL
import Data.CSV.Conduit
import Data.CSV.Conduit.Conversion
import Data.Text (Text)
import Data.Vector
import System.IO
readStocks :: FilePath -> IO (Vector StockInfo)
readStocks fp = readCSVFile defCSVSettings fp
data StockInfo = StockInfo
{ date :: !String
, open :: !Double …
Run Code Online (Sandbox Code Playgroud)