小编dav*_*420的帖子

为什么这种类型变量不明确?

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)

haskell type-inference typeclass

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

为什么我从GHCi收到此警告?

模式匹配时我收到一个好奇的警告,但只有当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)

warnings haskell case-statement ghc overloaded-strings

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

如何使用Lucene生成唯一ID?

我正在使用Lucene存储(以及索引)各种文档.

每个文档都需要一个持久的唯一标识符(用作URL的一部分).

如果我使用的是SQL数据库,我可以使用integer primary key auto_increment(或类似的)字段为每个添加的记录自动生成唯一的ID.

Lucene有没有办法做到这一点?

我知道Lucene中的文档已编号,但已注意到这些数字会随着时间的推移而重新分配.

(我使用的是Lucene 3.0.3的Java版本.)

java lucene

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

如何使用Java/Scala中的Unix域套接字?

从Scala使用Unix域套接字的最佳方法是什么?

我找到了一个名为JUDS的Java库,但它似乎不允许我通过套接字发送文件描述符 - 这是我想首先使用Unix域套接字的原因.

JUDS自述文件是指一个名为J-BUDS的竞争库,但我无法在任何地方找到它.

我可以自己将这个功能添加到JUDS中,但是如果它已经在其他地方的jar文件中,我宁愿不重新发明轮子.

java jvm scala unix-socket

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

使用地图haskell列出的元组列表

我想转换元组列表:[(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做到这一点?为什么我的东西不起作用?

haskell

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

突破的变化在哪里?

我写了一个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)

haskell yesod

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

在Haskell中设计一般的幻灯片窗口程序,需要类型类系列吗?

我试图在元素列表上实现一般的滑动窗口算法.一个常见的用例是在长度为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)

haskell

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

为什么不这个类型检查呢?

这是玩具示例.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)

haskell impredicativetypes

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

如何避免模板 Haskell 声明引用中的额外缩进?

我有一个玩具程序:

$ 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 template-haskell

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

处理Haskell中的列表列表

我是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)

haskell list

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