简单的问题.是否可以检查仅在函数内存活的变量的类型?
例如:
main = do
x <- something
Run Code Online (Sandbox Code Playgroud)
我该如何检查x
?
我不能:type x
在ghci 做,因为x
不是全球性的.
我正在尝试按照此处列出的说明重新安装我的Haskell库并启用性能分析
但是,每当cabal尝试重新安装其中一个库时,我都会收到以下消息:
LibraryNameHere.hs:1:1:
Could not find module `Prelude'
Perhaps you haven't installed the profiling libraries for package `base'?
Use -v to see a list of the files searched for.
Run Code Online (Sandbox Code Playgroud)
当我尝试重新base
启动并启用性能分析时,我收到以下消息:
me@machine:~/.cabal/$ cabal install -p base
Resolving dependencies...
All the requested packages are already installed:
base-4.5.0.0
Use --reinstall if you want to reinstall anyway.
me@machine:~/.cabal/$ cabal install --reinstall -p base
Resolving dependencies...
cabal: Could not resolve dependencies:
next goal: base (user goal)
rejecting: base-4.7.0.0, 4.6.0.1, 4.6.0.0, 4.5.1.0, …
Run Code Online (Sandbox Code Playgroud) 这是代码:
{-# LANGUAGE FlexibleContexts #-}
import Data.Int
import qualified Data.Vector.Unboxed as U
import qualified Data.Vector.Generic as V
{-# NOINLINE f #-} -- Note the 'NO'
--f :: (Num r, V.Vector v r) => v r -> v r -> v r
--f :: (V.Vector v Int64) => v Int64 -> v Int64 -> v Int64
--f :: (U.Unbox r, Num r) => U.Vector r -> U.Vector r -> U.Vector r
f :: U.Vector Int64 -> U.Vector Int64 -> U.Vector Int64 …
Run Code Online (Sandbox Code Playgroud) 在阅读monads时,我一直看到像"Xyz monad中的计算"这样的短语.计算"在某个monad中"是什么意思?
我认为我对monad的含义有一个公平的把握:允许计算产生通常是某种预期类型的输出,但可以替代地或另外地传达一些其他信息,例如错误状态,记录信息,状态等,以及允许这种计算被链接.
但我不知道计算如何被称为"在"monad中.这只是引用产生monadic结果的函数吗?
示例:(搜索"计算中")
我已经阅读了代数数据类型的一些解释:
这些文章提供了非常详细的描述和代码示例.
起初我认为代数数据类型只是用于轻松定义某些类型,我们可以将它们与模式匹配相匹配.但在阅读完这些文章之后,我发现那里甚至没有提到"模式匹配",内容看起来很有趣,但比我预期的要复杂得多.
所以我有一些问题(这些文章没有回答):
我已经看到一些消息来源随便提到"在Excel电子表格中使用Haskell"的想法- 好像这是每个人都熟悉和了解的东西.
这对我来说当然是个新闻.这个想法具有明显的吸引力--Haskell非常适合这种事情.但有没有人真正让这个工作?
我正在寻找一个无monad,常量访问查询O(1)关联数组.
考虑假设类型:
data HT k v = ???
Run Code Online (Sandbox Code Playgroud)
我想构建一次不可变结构:
fromList :: Foldable t, Hashable k => t (k,v) -> HT k v
Run Code Online (Sandbox Code Playgroud)
我希望随后以恒定时间访问重复查询::
lookup :: Hashable k => HT k v -> k -> Maybe v
Run Code Online (Sandbox Code Playgroud)
似乎有两个候选图书馆不足:
unordered-containers
unordered-containers
包含类型的严格和惰性变体HashMap
.两者HashMap
都有函数记录的O(log n)查询lookup
.此查询访问时间似乎是由于HashMap
类型的构造,其具有允许O(log n) insert
功能的内部树结构.对于许多用例而言,可理解的设计权衡,但由于我不需要可变,HashMap
这种权衡妨碍了我的用例.
hashtables
hashtables
包含一个HashTable
类型类和三个具有不同表构造策略的实例类型.这个库的类型类定义了一个常量时间O(1) lookup
函数定义,但它永远嵌入在ST
monad中.没有办法"冻结"有状态HashTable
实现lookup
,并且没有嵌入有状态monad 的函数.当整个计算以状态monad包装时,库的类型类接口设计得很好,但这种设计不适合我的用例.
是否存在一些定义类型和函数的其他库,它们可以构造一个不可嵌入的常量访问查询O(1)关联数组,该数组未嵌入有状态monad中?
是否存在某种方法来包装或修改这些现有的基于散列的库,以生成不嵌入有状态monad …
我正在尝试处理一个非常大的unicode文本文件(6GB +).我想要的是计算每个独特单词的频率.Data.Map
当我遍历文件时,我使用严格来跟踪每个单词的计数.这个过程需要太多时间和太多内存(20GB +).我怀疑地图很大,但我不确定它应该达到文件大小的5倍!代码如下所示.请注意我尝试了以下内容:
使用Data.HashMap.Strict
而不是Data.Map.Strict
.Data.Map
似乎在较慢的内存消耗增加率方面表现更好.
使用lazy ByteString
而不是lazy 读取文件Text
.然后我编码为文本做一些处理,然后对其进行编码,回ByteString
了IO
.
import Data.Text.Lazy (Text(..), cons, pack, append)
import qualified Data.Text.Lazy as T
import qualified Data.Text.Lazy.IO as TI
import Data.Map.Strict hiding (foldr, map, foldl')
import System.Environment
import System.IO
import Data.Word
dictionate :: [Text] -> Map Text Word16
dictionate = fromListWith (+) . (`zip` [1,1..])
main = do
[file,out] <- getArgs
h <- openFile file ReadMode
hO <- openFile out WriteMode …
Run Code Online (Sandbox Code Playgroud)正如帖子标题所说,我在Haskell中定义了以下函数:
prop_LeftInverse :: (Eq a, Eq b) => [(a,b)] -> Bool
prop_LeftInverse (x,y):(xs,ys) = undefined
Run Code Online (Sandbox Code Playgroud)
应该将元组列表作为输入.我得到了一个,parse error in pattern
但我无法弄清楚它是什么,也没有找到关于这个具体案例的任何信息......
为了记录,我是一个Haskell noob.我试图理解为什么范围可以声明为
[1..10] -- yields [1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)
并不是
[10..1] -- yields []
Run Code Online (Sandbox Code Playgroud)
看起来很简单,就像这样实现它:
(.:.) :: Enum a => a -> a -> [a]
(.:.) a b =
| a == b = []
| a > b = a : (a - 1) .:. b
| a < b = a : (a + 1) .:. b
Run Code Online (Sandbox Code Playgroud)
我在这里不理解什么?