小编sas*_*nin的帖子

Cabal包装稳定性领域的惯例

Cabal允许自由形态稳定性字段:

稳定性:自由形态

包装的稳定性水平,例如alpha,experimental,provisional,stable.

关于这些稳定性价值观的社区惯例是什么?考虑experimental什么,什么是provisional?我看到只有少数包被声明为stable.它涉及什么样的稳定性,暴露的API的稳定性或软件的最终无错状态?

haskell cabal hackage

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

如何在.cabal中指定对外部C库的依赖?

我在Hackage上维护了一个带有FFI绑定的库.所以我的Haskell库依赖于相应的C库及其头文件.现在我在.cabal文件中指定外部依赖项,如下所示:

PkgConfig-Depends:
      libfoo >= 1.2
Run Code Online (Sandbox Code Playgroud)

它在Linux中对我很有用.但是,我有一个库的用户报告,pkg-config在Windows 上安装相当麻烦,而他更喜欢

Includes:
      foo.h
Extra-libraries:
      foo
Run Code Online (Sandbox Code Playgroud)

我希望我的库尽可能容易构建,并且不希望强制不严格要求的构建依赖项.但是,我看到Cabal手册建议使用PkgConfig-Depends.

我的问题:

  • 对于跨平台软件包,我更喜欢哪种方式?
  • 是否有可能以.cabal这样的方式编写文件,它可以使用pkg-config和不使用?
  • 顺便说一句,它pkg-config包含在Haskell平台中(我现在没有Windows机器可以检查)?

windows haskell packaging pkg-config cabal

14
推荐指数
2
解决办法
2627
查看次数

多语言网站的最佳做法是什么?

我想创建一个多语言网站,以便所有或几乎所有页面都可以使用2个或更多翻译版本.要遵循哪些最佳做法?

例如,我考虑这些语言选择机制:

  1. 基于Cookie的首选语言选择.
  2. Accept-Language如果未设置cookie,则基于标头.
  3. 否则基于GeoIP(可能).

还有别的事吗?

如何提供不同的翻译?

  1. LANG.example.com/page
  2. example.com/LANG/page
  3. example.com/page?hl=LANG
  4. ...
  5. 上面的任何一个重定向到example.com/page?(似乎气馁)

如何确保所有翻译都正确编入索引?

  1. 所有页面+正确Content-Language标题的站点地图都足够了?

让用户知道有其他翻译的最佳方式是什么,但不要分散他们的注意力?

  1. 列出页眉/页脚/侧边栏中的可用语言(如维基百科)
  2. 在内容旁边放置"选择语言"选择器

处理遗失/过时翻译的最佳政策是什么?

  1. 根本不显示缺页或用其他语言显示页面?
  2. 显示旧翻译,带有警告的旧翻译或使用其他语言的页面?

还有什么我应该考虑的?我该怎么做,我绝对不应该做什么?

user-interface search-engine internationalization

13
推荐指数
1
解决办法
3760
查看次数

代数型数据构造函数的"模式匹配"

让我们考虑一个包含许多构造函数的数据类型:

data T = Alpha Int | Beta Int | Gamma Int Int | Delta Int
Run Code Online (Sandbox Code Playgroud)

我想编写一个函数来检查是否使用相同的构造函数生成了两个值:

sameK (Alpha _) (Alpha _) = True
sameK (Beta _) (Beta _) = True
sameK (Gamma _ _) (Gamma _ _) = True
sameK _ _ = False
Run Code Online (Sandbox Code Playgroud)

维护sameK不是很有趣,无法轻易检查其正确性.例如,当添加新的构造函数时T,很容易忘记更新sameK.我省略了一行来举个例子:

-- it’s easy to forget:
-- sameK (Delta _) (Delta _) = True
Run Code Online (Sandbox Code Playgroud)

问题是如何避免样板sameK?或者如何确保检查所有T构造函数?


我找到的解决方法是为每个构造函数使用单独的数据类型,派生Data.Typeable和声明一个公共类型类,但我不喜欢这个解决方案,因为它的可读性要低得多,否则只是一个简单的代数类型对我有用:

{-# LANGUAGE DeriveDataTypeable #-}

import Data.Typeable

class …
Run Code Online (Sandbox Code Playgroud)

haskell types pattern-matching algebraic-data-types

13
推荐指数
3
解决办法
3842
查看次数

固定空间和线性时间随机算法的迭代

我曾经问一个类似的问题一次.现在我会更具体.目的是学习一个Haskell习语来编写具有monadic结果的迭代算法.特别是,这可能对实现各种随机算法很有用,例如遗传算法等.

我写了一个示例程序,用Haskell中的这些算法表明了我的问题.它的完整来源是hpaste.

关键点是随机更新一个元素(因此结果是State StdGen或者其他一些monad):

type RMonad = State StdGen

-- An example of random iteration step: one-dimensional random walk.
randStep :: (Num a) => a -> RMonad a
randStep x = do
  rnd <- get
  let (goRight,rnd') = random rnd :: (Bool, StdGen)
  put rnd'
  if goRight
     then return (x+1)
     else return (x-1)
Run Code Online (Sandbox Code Playgroud)

然后需要更新许多元素,并多次重复该过程.这是一个问题.由于每一步都是monad action(:: a -> m a),重复多次,因此有效地组合这些动作很重要(快速忘记上一步).从我之前的问题中学到的东西(用折叠构成monad动作), seqdeepseq帮助组成monadic动作.所以我这样做:

-- Strict (?) iteration.
iterateM' …
Run Code Online (Sandbox Code Playgroud)

random performance profiling haskell

13
推荐指数
2
解决办法
1332
查看次数

非维护者上传到Hackage

我有一个Hackage包依赖于第三方包,它不是建立在较新版本的GHC(> = 7.2)上.只需一行补丁(LANGUAGEpragma)即可解决其他软件包的问题.我将补丁发送到上游两次,但没有收到任何反馈.问题是我的包不能安装,直到依赖项得到修复.

我本来可以上传固定版本的depenency软件包(带有一个小版本),但我想听听社区对这种非维护者上传的态度.同样,我不想更改库接口,我只添加一个新的编译标志,使其可以再次构建.

  • 是否允许和容忍非维护者上传到Hackage?
  • Hackage上的包的分支是更好的方法吗?

haskell hackage

13
推荐指数
2
解决办法
348
查看次数

使用leptonica进行OCR的图像处理(反色文本)

我试图用leptonica处理以下图像,用tesseract提取文本.

原始图片: 原始图像

Tesseract在原始图像上得出:

i s l
D2J1FiiE-l191x1iitmwii9 uhiaiislz-2 Q ~37
Bottom linez
With a little time!
you can learn social media technology
using free online resources-
And if you donity
youlll be at a significant disadvantage
to
other HOn-pFOiiTS-
Run Code Online (Sandbox Code Playgroud)

不是很好,特别是顶级背景.所以使用leptionica我使用背景去除算法(模糊,差异,阈值,反转)来获得以下图像: 处理过的图像

但是tesseract并没有做得很好:

@@r-mair lkrm@W lh@w ilr@ mJs@ iklh@ ii@c2lhm1@ll
mm Mime
VWU1 a Mitt-Jle time-
@1m ll@@Wn Om @@@lh1
using free onhne resources-
Andifyoudoni
9110 ate a $0 D
to other non-profrts
I
Run Code Online (Sandbox Code Playgroud)

看来,主要的问题是,现在所有的文本都是概述而不是实体.如何调整我的算法或我可以添加什么使文本变为实体?

ocr tesseract image-processing

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

在pdfLaTeX中删除大写字母

我想在pdfLaTeX中找到一种方法来生成滴帽(大的初始字母高几行).我知道有一个dropping包与latex+一起使用时效果很好dvips.但是,与pdflatex结果一起使用时看起来很难看.

我的源文件是:

\documentclass[12pt]{article}

% for pdflatex file.tex # dropping is ugly
% \usepackage[pdftex]{graphicx}
% \usepackage[pdftex]{dropping}

% for latex file.tex ; dvips -T 12cm,8cm file.dvi # dropping is OK
\usepackage[dvips]{graphicx}
\usepackage{dropping}

\usepackage[papersize={12cm,8cm},
    left=0.5cm,right=0.5cm,
    top=0.5cm,bottom=0.5cm]{geometry}

\begin{document}
\dropping[-3pt]{3}{W}ith a drop cap, the initial sits within the margins and
runs several lines deep into the paragraph, pushing some normal-sized text off
these lines. This keeps the left and top margins of the paragraph flush.
In~modern browsers, …
Run Code Online (Sandbox Code Playgroud)

pdf latex pdf-generation typography

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

Haskell中的CPP扩展和多行文字

是否可以在包含多行字符串文字的Haskell代码上使用CPP扩展?Haskell还有其他条件编译技术吗?

例如,我们来看看这段代码:

-- If the next line is uncommented, the program does not compile.
-- {-# LANGUAGE CPP #-}

msg = "Hello\
  \ Wor\
  \ld!"

main = putStrLn msg
Run Code Online (Sandbox Code Playgroud)

如果我取消注释{-# LANGUAGE CPP #-},那么GHC会用一个词法错误来反驳这段代码:

[1 of 1] Compiling Main             ( cpp-multiline.hs, cpp-multiline.o )

cpp-multiline.hs:4:17:
    lexical error in string/character literal at character 'o'
Run Code Online (Sandbox Code Playgroud)

使用GHC 6.12.1,可以使用cpphs.

我确认使用cpphs.compat包装器和-pgmP cpphs.compat选项有帮助,但我希望有一个不依赖于自定义shell脚本的解决方案.-pgmP cpphs不起作用.

PS我需要为GHC <6.12和GHC> = 6.12使用不同的代码,是否可以不使用预处理器?

UPD.除了接受Ganesh的答案之外,我还发现另一个解决方法是将所有条件声明放在一个单独的模块中{-# LANGUAGE CPP #-},从而避免使用多行字符串的模块中的CPP.

preprocessor haskell conditional-compilation ghc

11
推荐指数
1
解决办法
2247
查看次数

多参数类型同义词实例

我试图弄清楚是否有可能(以及如何)为多参数类型同义词定义类实例.

例如:

{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}

type F a b = a -> b
data DF a b = DF (a -> b)

class C c a b where
    doc :: c a b -> a -> b
Run Code Online (Sandbox Code Playgroud)

它适用于多参数类型的实例:

instance C DF a b where
    doc (DF f) x = f x
Run Code Online (Sandbox Code Playgroud)

但它不适用于类型同义词:

-- ERROR:
--
-- Type synonym `F' should have 2 arguments, but has been given none
-- In the instance declaration for `C F a b' …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass

11
推荐指数
1
解决办法
1540
查看次数