小编Ten*_*ner的帖子

镜头,fclabels,数据访问器 - 用于结构访问和变异的库更好

至少有三个流行的库用于访问和操作记录字段.我所知道的是:数据访问器,fclabels和镜头.

我个人开始使用数据访问器,现在我正在使用它们.然而最近在haskell-cafe上有一个fclabels优越的意见.

因此,我对这三个(也许更多)库的比较感兴趣.

haskell record data-structures lenses

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

为什么GetType()在通过方法组委托调用时无法找到类型?

我们有一个非常简单的程序来调用Type.GetType静态方法.两个示例都应返回有效的类型实例.实际上只有第二个.看起来使用堆栈爬行时会发生奇怪的事情GetType,但这究竟是什么问题呢?是bug还是一些不起眼的功能?

public class TestClass { }

class Program
{
    static void Main(string[] args)
    {
        var fullName = typeof(TestClass).FullName;
        Console.WriteLine("Full name: {0}", fullName);

        new[] { fullName }.Select(Type.GetType).ToList().ForEach(t => Console.WriteLine("Method group: '{0}'", t));
        new[] { fullName }.Select(t => Type.GetType(t)).ToList().ForEach(t => Console.WriteLine("Closure: '{0}'", t));
    }
}
Run Code Online (Sandbox Code Playgroud)

运行:

Full name: GetTypeBeingWeird.TestClass
Method group: ''
Closure: 'GetTypeBeingWeird.TestClass'
Run Code Online (Sandbox Code Playgroud)

c# reflection

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

Monad变形金刚图书馆 - 哪一个使用?

Hackage上有许多不同的monad变换器库.有些人似乎比其他人更受关注.仅举几例:mtl(由于某种原因取决于变压器的当前版本),变压器,monadLib,monads-tf,mtlx,contstuff.

应该首选哪一个?为什么?它们的独特之处是什么?性能怎么样?

monads haskell functional-programming monad-transformers

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

安全执行不受信任的Haskell代码

我正在寻找一种安全运行任意Haskell代码的方法(或拒绝运行不安全的代码).

一定有:

  • 模块/功能白名单
  • 执行超时
  • 内存使用限制

功能我看看:

  • 杀死线程的能力
  • 将模块编译为本机代码
  • 缓存已编译的代码
  • 同时运行几个解释器
  • 编译器错误的复杂数据类型(String中的简单消息)

有了这种功能,就可以实现一个能够运行任意Haskell代码的浏览器插件,这是我想到的.

编辑:我有两个答案,都很好.谢谢!可悲的是,似乎没有现成的图书馆,只是一个类似的程序.这是一个有用的资源.无论如何,我想我会等待7.2.1被释放并尝试在我自己的程序中使用SafeHaskell.

haskell sandbox execution isolation

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

为"cabal安装"启用--hyperlink-source

该命令cabal haddock非常有用--hyperlink-source选项.我希望在构建文档时使用超链接来源cabal install.

机票#517似乎就是这样:http://hackage.haskell.org/trac/hackage/ticket/517

但是,也许可以通过〜/ .cabal/config文件设置这个标志?

如果没有,我如何使用来自#517的补丁进行cabal-install构建,而不安装目前强制要求的Cabal-1.9(由于12月的一个补丁)?

haskell cabal haddock

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

STM性能不佳/锁定

我正在编写一个程序,其中有大量代理监听事件并对它们做出反应.由于Control.Concurrent.Chan.dupChan被弃用,我决定使用TChan的广告.

TChan的表现比我预期的要糟糕得多.我有以下程序来说明问题:

{-# LANGUAGE BangPatterns #-}

module Main where

import Control.Concurrent.STM
import Control.Concurrent
import System.Random(randomRIO)
import Control.Monad(forever, when)

allCoords :: [(Int,Int)]
allCoords = [(x,y) | x <- [0..99], y <- [0..99]]

randomCoords :: IO (Int,Int)
randomCoords = do
  x <- randomRIO (0,99)
  y <- randomRIO (0,99)
  return (x,y)

main = do
  chan <- newTChanIO :: IO (TChan ((Int,Int),Int))

  let watcher p = do
         chan' <- atomically $ dupTChan chan
         forkIO $ forever $ do
                    r@(p',_counter) <- atomically $ …
Run Code Online (Sandbox Code Playgroud)

concurrency performance haskell stm

20
推荐指数
3
解决办法
3263
查看次数

cabal-install配置文件的文档

~/.cabal/configcabal-install使用的商店配置.我想对它做一些hackery.(具体来说,安装了多个GHC版本,我希望有单独的文档索引).

但是,除了默认文件中包含的内容之外,我无法找到有关其语法或变量的任何文档.有没有可用的文件?

编辑:我已经说明了上面的目标,但是让我添加一些细节:如果在两个版本的GHC中安装了相同的软件包(例如GTK),它们最终会出现在同一个文档索引文件中.对于每个GHC安装,我不希望将本地文档索引分开.我相信在某种程度上可以使用文档目录设置,但是必须有一个当前使用的GHC版本的变量.如果没有,可能会有一些变通方法,但除非我看到文档,否则我无法说出来.

haskell cabal-install

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

致力于置换monad变压器堆栈

我发现monad变换器的一个问题是需要lift将操作转换为正确的monad.单lift在这里和那里也不错,但有时也有功能类似如下:

fun = do
  lift a
  lift b
  c
  lift d
  lift e
  f
Run Code Online (Sandbox Code Playgroud)

我希望能够这样编写这个函数:

fun = monadInvert $ do
  a
  b
  lift c
  d
  e
  lift f
Run Code Online (Sandbox Code Playgroud)

这会减少lifts 的数量并使代码更清晰.

问题是:对于monads是monadInvert可能的?应该如何创建这个功能?

加分点:定义它monad m的实例MonadIO.

这个问题的标题提到了排列:实际上,我们如何处理monad变换器堆栈的任意排列?

monads haskell monad-transformers

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

使用Yesod高效上传大文件

我想用我的Yesod应用程序实现大文件上传.现在我有:

module Handler.File where

import Import

import System.Random
import System.FilePath
import Control.Monad
import qualified Data.ByteString.Lazy as LBS
import qualified Data.Text.Encoding

-- upload

uploadDirectory :: FilePath -- FIXME: make this configurable
uploadDirectory = "incoming"

randomFileName :: IO FilePath
randomFileName = do
  fname'base <- replicateM 20 (randomRIO ('a','z'))
  let fname = uploadDirectory </> fname'base <.> "bin"
  return fname

fileUploadForm :: Form (FileInfo, Textarea)
fileUploadForm = renderDivs $ (,)
    <$> fileAFormReq "Choose a file"
    <*> areq textareaField "What's on the file?" Nothing

getFileNewR …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

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

哪个Haskell库用于计算机图形几何?

我想在Haskell中做一些计算机图形学实验.这将包括进行一些几何计算并最终编写光线跟踪器.我应该选择哪个库来轻松处理矢量,矩阵和相关操作?

Hackage中很少有包括像vectAC-Vector在内的漂亮外观,但很容易错过很多不同库中的好候选者.

graphics haskell libraries

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