小编Dam*_*les的帖子

使用输入表单将数据上载到Yesod服务器

在Yesod中通过自定义输入表单上传文件的正确方法是什么?

我在AngularJS中开发了一个前端,并通过JSON对象将数据传入和传出服务器.但是,上传文件时这不起作用.出于这个原因,我使用了表格.

收集不同的资源我最终得到以下代码.在客户端,我使用以下功能:

this.submitNewMeas = function() {
    var selected_file = document.getElementById('measurements').files[0];
    var fd = new FormData();
    fd.append("measurementsFile", selected_file);

    var response =  $http({
    method: 'POST',
    url: '/measurements/'+this.currMedia.id,
    headers: {
                'Content-Type': 'multipart/form-data'
    },
    data: {
                fd
    },
    transformRequest: formDataObject
    });
    ...
    };
Run Code Online (Sandbox Code Playgroud)

在服务器端,我收到如下数据:

postMeasurementsR :: MediaId -> Handler Value
postMeasurementsR mediaId =  do
result <- runInputPost $ iopt fileField "measurementsFile"
case result of
    Just fileInfo -> do
        saveMeas fileInfo "measDir"

saveMeas :: FileInfo -> FilePath -> HandlerT App IO (FilePath) …
Run Code Online (Sandbox Code Playgroud)

haskell file-upload yesod angularjs

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

使用带有Stack的私有git存储库

我正在尝试配置堆栈以使用私有git存储库的Haskell包.看一下文档,似乎可以将git存储库添加为本地依赖项.问题是我看不到指定登录服务器的凭据的方法.

使用堆栈添加私有git存储库包的正确方法是什么?

编辑:为了完整起见,我添加了stack.yaml编辑的部分,以便能够使用私有存储库:

packages:
- '.'
- location:
    git: ssh://git@urlprivate-git-repo.com:7999/project/subproject.git
    commit: 4ac0e47bfd3
  subdirs:
  - subdir-of-the-private-package
  extra-dep: true
Run Code Online (Sandbox Code Playgroud)

正如@renegadeborealis指出的那样,身份验证是在Stack之外进行的.

git haskell haskell-stack

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

函数的类型是否可以限制为某些提升的数据构造函数?

我正试图将我的头围绕在提升的数据构造函数上。我特别想知道它们在不涉及类型系列和 GADT 的上下文中是否有用。所以我试图考虑是否可以使用它们来限制某个函数可以采用的术语级别值。例如,是否可以定义一个仅接受所有True术语列表的函数。以下将不起作用,因为(->)它是来自Typeto的函数Type并且'[ 'True]具有 kind [Bool]

allTrue :: '[ 'True] -> Int
allTrue = length 
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否可以使用提升的数据构造函数'True来定义这样的函数。此外,这样的定义是否总是需要 GADT 和/或类型族?

haskell

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

Cabal + Stack:指定cabal文件中的软件包版本

通常,当向.cabal文件添加新的依赖项时,我指定了我依赖的新库的版本.但是stack使用一组策划的库,我想知道在.cabal文件中指定包版本是否有意义.我的猜测是指定lts版本stack.yaml就足够了.

haskell cabal haskell-stack

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

cs240:recDir在两种类似情况下使用的额外150 MB

我正在浏览Haskell中Functional Systems幻灯片.在该讲座中,定义了一个函数recDir2,用于unsafeInterleaveIO递归列出目录中的所有文件:

import qualified Data.ByteString.Lazy       as L

recDir2 :: FilePath -> IO [FilePath]
recDir2 dir = do
  ds <- openDirStream dir
  let protect m = m `onException` closeDirStream ds

      nextName = unsafeInterleaveIO $
                 protect (readDirStream ds) >>= checkName

      checkName "" = closeDirStream ds >> return []
      checkName "." = nextName
      checkName ".." = nextName
      checkName name = getSymbolicLinkStatus path >>= checkStat path
          where path = dir </> name

      checkStat path stat
          | …
Run Code Online (Sandbox Code Playgroud)

memory haskell lazy-evaluation

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

为什么runParsecT需要初始用户状态两次?

我已经定义了以下自定义解析器:

newtype St = St Int
type TxsParser = ParsecT String St (State St)
Run Code Online (Sandbox Code Playgroud)

现在为了能够运行这个解析器,我必须使用该runParserT函数.

runParserT :: Stream s m t 
           => ParsecT s u m a 
           -> u 
           -> SourceName
           -> s 
           -> m (Either ParseError a) 
Run Code Online (Sandbox Code Playgroud)

哪个实例化到我的自定义解析器读取:

runParserT :: ParsecT String St (State St) a 
           -> St 
           -> SourceName 
           -> String 
           -> State St (Either ParseError a)
Run Code Online (Sandbox Code Playgroud)

但这意味着如果我想评估runParserT(状态monad)的结果,我必须提供另一个初始状态(St在这种情况下为类型).例如:

 evalState (runParserT myParser (St 0) fp input) (St 0)
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我必须重复两次状态似乎是错误的.这是否意味着混合ParsecTStatemonad不是一个好主意?

parsing haskell parsec

0
推荐指数
2
解决办法
75
查看次数