Cabbage.hs:
module Cabbage where
class Cabbage a
where foo :: a -> String -- the parameter is only present for its type,
-- the parameter value will be ignored
bar :: String -> a
quux :: Cabbage a => String -> a
quux s = bar (s ++ foo (undefined :: a))
Run Code Online (Sandbox Code Playgroud)
当我编译(使用ghc)时,我收到此错误消息:
Cabbage.hs:7:19:
Ambiguous type variable `a' in the constraint:
`Cabbage a' arising from a use of `foo' at Cabbage.hs:7:19-38
Probable fix: add a type signature that fixes these …Run Code Online (Sandbox Code Playgroud) 模式匹配时我收到一个好奇的警告,但只有当OverloadedStrings被启用时...
$ ghci -Wall
GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> let f x = case (x :: [String]) of {[""] -> "root"; ["product", _] -> "product"; _ -> "unknown"}
Prelude> :q
Leaving GHCi.
$ ghci -Wall -XOverloadedStrings
GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... …Run Code Online (Sandbox Code Playgroud) 我正在使用Lucene存储(以及索引)各种文档.
每个文档都需要一个持久的唯一标识符(用作URL的一部分).
如果我使用的是SQL数据库,我可以使用integer primary key auto_increment(或类似的)字段为每个添加的记录自动生成唯一的ID.
Lucene有没有办法做到这一点?
我知道Lucene中的文档已编号,但已注意到这些数字会随着时间的推移而重新分配.
(我使用的是Lucene 3.0.3的Java版本.)
从Scala使用Unix域套接字的最佳方法是什么?
我找到了一个名为JUDS的Java库,但它似乎不允许我通过套接字发送文件描述符 - 这是我想首先使用Unix域套接字的原因.
JUDS自述文件是指一个名为J-BUDS的竞争库,但我无法在任何地方找到它.
我可以自己将这个功能添加到JUDS中,但是如果它已经在其他地方的jar文件中,我宁愿不重新发明轮子.
我想转换元组列表:[(2,2,2),(3,3,3),(4,4,4),(5,5,5)]到列表:[2,2, 2,3,3,3,4,4,4,5,5,5]
我试试这个
map (\(a,b,c,d)->a:b:c:d) listOfTuples
Run Code Online (Sandbox Code Playgroud)
但得到一个错误.
Prelude> map (\(a,b,c)->a:b:c) [(1,2,3), (5,6,7)]
<interactive>:1:37:
No instance for (Num [t])
arising from the literal `7' at <interactive>:1:37
Possible fix: add an instance declaration for (Num [t])
In the expression: 7
In the expression: (5, 6, 7)
In the second argument of `map', namely `[(1, 2, 3), (5, 6, 7)]'
Prelude>
Run Code Online (Sandbox Code Playgroud)
我怎么能用lambda做到这一点?为什么我的东西不起作用?
我写了一个CRUD应用程序来与JIRA接口.我最终升级了我的haskell环境,因为cabal-dev并没有解决所有问题.结果,我有一些破损,随着我尝试使用任何与JIRA接口的代码时出现此错误.
Spike: HandshakeFailed (Error_Misc "user error (unexpected type received. expecting
handshake and got: Alert [(AlertLevel_Warning,UnrecognizedName)])")
Run Code Online (Sandbox Code Playgroud)
经过一番谷歌搜索后,我认为这与使用tls的tls或http-conduit有关.
我目前正在使用tls-1.1.2,http-conduit-1.8.7.1
之前我正在使用
tls-0.9.11并且http-conduit >= 1.5 && < 1.7(不确定到底哪个旧安装已经消失了.
这是我相信休息时间正在发生的地方
manSettings :: ManagerSettings
manSettings = def { managerCheckCerts = \ _ _ _-> return CertificateUsageAccept }
Run Code Online (Sandbox Code Playgroud)
这就是它过去的样子
manSettings :: ManagerSettings
manSettings = def { managerCheckCerts = \ _ _ -> return CertificateUsageAccept }
Run Code Online (Sandbox Code Playgroud)
这是使用它的代码
initialRequest :: forall (m :: * -> *). URI -> IO (Request m,Manager)
initialRequest uri …Run Code Online (Sandbox Code Playgroud) 我试图在元素列表上实现一般的滑动窗口算法.一个常见的用例是在长度为5的所有窗口中找到最大的数字.或者它可以计算窗口中有多少元素对于某个谓词是真的.
滑动窗口从左向右,并保持一些数据结构.一个元素落在它调用remove数据结构的窗口之外.如果一个新元素落在窗口内,我们add将元素放到数据结构中.它还有一个函数aggregate,可以在数据结构上计算某些东西.
要使用的天真数据结构是一个出列的,但是有可能有人希望将其他类型的数据结构用于特殊用例.
我最初的想法是拥有一个看起来像这样的长功能
runSlidingWindow :: (c->(Int,a)->c) -- add
-> (c->(Int,a)->c) -- remove
-> (c->b) -- aggregate
-> c -- identity
-> Int -- width
-> [(Int,a)] -- input
-> [(Int,b)]
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一些Haskell方式,所以我们可以定义一些类Window a b c,这样我们就可以重写函数了
runSlidingWindow :: (Window a b c=>WindowInstance a b c)
-> WindowInstance a b c
-> [(Int,a)]
-> [(Int,b)]
runSlidingWindow window input
Run Code Online (Sandbox Code Playgroud)
当然我不认为上面是有效的Haskell代码.我们想强制任何类型的实例Window a b c具有表单的功能
add :: (Window a b c=>WindowInstance a b c)
-> …Run Code Online (Sandbox Code Playgroud) 这是玩具示例.s:
{-# LANGUAGE ImpredicativeTypes #-}
import Control.Arrow
data From = From (forall a. Arrow a => a Int Char -> a [Int] String)
data Fine = Fine (forall a. Arrow a => a Int Char -> a () String)
data Broken = Broken (Maybe (forall a. Arrow a => a Int Char -> a () String))
fine :: From -> Fine
fine (From f) = Fine g
where g :: forall a. Arrow a => a Int Char -> a …Run Code Online (Sandbox Code Playgroud) 我有一个玩具程序:
$ cat a.hs
main = putStrLn "Toy example"
$ runghc a.hs
Toy example
Run Code Online (Sandbox Code Playgroud)
让我们向其中添加一些模板 Haskell:
$ cat b.hs
{-# LANGUAGE TemplateHaskell #-}
id [d|
main = putStrLn "Toy example"
|]
$ runghc b.hs
b.hs:3:0: parse error (possibly incorrect indentation)
Run Code Online (Sandbox Code Playgroud)
那么,让我们修复缩进:
$ cat c.hs
{-# LANGUAGE TemplateHaskell #-}
id [d|
main = putStrLn "Toy example"
|]
$ runghc c.hs
Toy example
Run Code Online (Sandbox Code Playgroud)
一个空格就足够了,但我必须缩进两个尾随行。
我可以避免缩进我的大部分模块吗?(我的 Real Modules 不止一行代码。)(而且没有使用{ ; ; }符号?)
我确实希望在引用中捕获所有模块声明 - 在正常代码中我可以替换(...)为$ ... …
我是Haskell的初学者,所以我在使用严格类型的东西时会苦苦挣扎,只是想知道是否有人可以帮助我使用我正在尝试构建的函数.基本上,它需要一个列表列表,例如:
[[1,2,3], [7,6,8], [0,3,4]]
Run Code Online (Sandbox Code Playgroud)
并将它们一起添加到一个列表中,通过沿着它的位置数来翻译后面的列表.因此,在示例列表上工作实际上将执行以下操作:
foldl (zipWith +) [] [[1,2,3],[0,7,6,8],[0,0,0,3,4]]
Run Code Online (Sandbox Code Playgroud)
这是我当前的函数(获取类型错误):
addLists :: [[Integer]] -> [Integer]
addLists [[]] = []
addLists [[x]] = [x]
addLists [x:xs] = zipWith (+) [x] ([0]++ (addLists xs))
Run Code Online (Sandbox Code Playgroud)