至少有三个流行的库用于访问和操作记录字段.我所知道的是:数据访问器,fclabels和镜头.
我个人开始使用数据访问器,现在我正在使用它们.然而最近在haskell-cafe上有一个fclabels优越的意见.
因此,我对这三个(也许更多)库的比较感兴趣.
我们有一个非常简单的程序来调用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) Hackage上有许多不同的monad变换器库.有些人似乎比其他人更受关注.仅举几例:mtl(由于某种原因取决于变压器的当前版本),变压器,monadLib,monads-tf,mtlx,contstuff.
应该首选哪一个?为什么?它们的独特之处是什么?性能怎么样?
我正在寻找一种安全运行任意Haskell代码的方法(或拒绝运行不安全的代码).
一定有:
功能我想看看:
有了这种功能,就可以实现一个能够运行任意Haskell代码的浏览器插件,这是我想到的.
编辑:我有两个答案,都很好.谢谢!可悲的是,似乎没有现成的图书馆,只是一个类似的程序.这是一个有用的资源.无论如何,我想我会等待7.2.1被释放并尝试在我自己的程序中使用SafeHaskell.
该命令cabal haddock
非常有用--hyperlink-source选项.我希望在构建文档时使用超链接来源cabal install
.
机票#517似乎就是这样:http://hackage.haskell.org/trac/hackage/ticket/517
但是,也许可以通过〜/ .cabal/config文件设置这个标志?
如果没有,我如何使用来自#517的补丁进行cabal-install构建,而不安装目前强制要求的Cabal-1.9(由于12月的一个补丁)?
我正在编写一个程序,其中有大量代理监听事件并对它们做出反应.由于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) ~/.cabal/config
cabal-install使用的商店配置.我想对它做一些hackery.(具体来说,安装了多个GHC版本,我希望有单独的文档索引).
但是,除了默认文件中包含的内容之外,我无法找到有关其语法或变量的任何文档.有没有可用的文件?
编辑:我已经说明了上面的目标,但是让我添加一些细节:如果在两个版本的GHC中安装了相同的软件包(例如GTK),它们最终会出现在同一个文档索引文件中.对于每个GHC安装,我不希望将本地文档索引分开.我相信在某种程度上可以使用文档目录设置,但是必须有一个当前使用的GHC版本的变量.如果没有,可能会有一些变通方法,但除非我看到文档,否则我无法说出来.
我发现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)
这会减少lift
s 的数量并使代码更清晰.
问题是:对于monads是monadInvert
可能的?应该如何创建这个功能?
加分点:定义它monad m
的实例MonadIO
.
这个问题的标题提到了排列:实际上,我们如何处理monad变换器堆栈的任意排列?
我想用我的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中做一些计算机图形学实验.这将包括进行一些几何计算并最终编写光线跟踪器.我应该选择哪个库来轻松处理矢量,矩阵和相关操作?