小编yai*_*chu的帖子

Paypal中的IPN与PDT

我在PayPal的即时付款通知(IPN)和付款数据传输(PDT)之间选择时遇到了一些麻烦.

基本上,用户在我的网站上购买一次性产品,在PayPal上付款,然后返回我的网站.我理解IPN是如何工作的,但我现在看到我可以通过PDT更轻松地触发成功购买后发生的各种操作,因为数据会在那里返回然后(而不是需要单独的监听器) .

但是,PayPal的PDT文档包含了这条神秘的内容:"PDT并不适用于信用卡或快速结账交易." ......但我在这个主题上找不到任何进一步的内容.

  1. 信用卡真的不适合与PDT一起使用吗?我想要的不只是一句话.

  2. 这是否意味着用户必须拥有/创建PayPal帐户才能付款?

  3. 这是否意味着如果我想让用户直接用PayPal账户和/或信用卡付款,我必须实施IPN?

任何经历过这种情况的人都可以解决这些问题吗?

payment paypal listener paypal-ipn paypal-pdt

96
推荐指数
1
解决办法
3万
查看次数

mtl,变形金刚,monads-fd,monadLib,以及选择的悖论

Hackage有几个monad变换器包:

  • mtl:Monad变压器库
  • 变形金刚:混凝土仿函数和monad变压器
  • monads-fd:Monad类,使用函数依赖
  • monads-tf:Monad类,使用类型族
  • monadLib:monad变换器的集合.
  • mtl-tf:使用类型族的Monad变换器库.
  • mmtl:模块化Monad变压器库
  • mtlx:具有类型索引的Monad变换器库,提供"免费"副本.
  • compose-trans:可组合的monad变换器

(也许我错过了一些)

我们应该使用哪一个?

mtl是Haskell平台中的一个,但我一直听说reddit它是不酷的.

但无论如何,选择有什么不好,这不是一件好事吗?

好吧,我看到数据访问器的作者如何必须使所有这些满足流行的选择:

  • data-accessor-monadLib库:monadLib monad的访问器函数
  • data-accessor-monads-fd library:使用Accessor访问monads-fd State monad类中的状态
  • data-accessor-monads-tf library:使用Accessor访问monads-tf状态monad类型系列中的状态
  • data-accessor-mtl library:使用Accessor访问mtl State monad类中的状态
  • data-accessor-transformers library:使用Accessor访问变换器State monad中的状态

我想如果这种情况继续下去,例如几个竞争的箭头包演变,我们可能会看到类似:spoonklink-arrows-transformers,spoonklink-arrows-monadLib,spoonklink-tfArrows-transformers,spoonklink-tfArrows-monadLib,...

然后我担心如果spoonklink被分叉,Hackage将耗尽磁盘空间.:)

问题:

  • 为什么有这么多monad变压器包?
  • 为什么mtl [被认为]不酷?
  • 有哪些主要区别?
  • 大多数这些看似竞争的软件包都是由Andy Gill编写的,由Ross Paterson维护.这是否意味着这些软件包不是竞争对手,而是以某种方式协同工作?安迪和罗斯认为他们自己的任何套餐都已过时吗?
  • 你和我应该使用哪一个?

monads haskell monad-transformers

84
推荐指数
3
解决办法
6374
查看次数

Cabal在需要分析库时不安装依赖项?

我想用分析编译我的程序,所以我运行:

$ cabal configure --enable-executable-profiling
...
$ cabal build
...
    Could not find module 'Graphics.UI.GLUT':
      Perhaps you havent installed the profiling libraries for package 'GLUT-2.2.2.0'?
...
$ # indeed I have not installed the prof libs for GLUT, so..
$ cabal install -p GLUT --reinstall
...
    Could not find module 'Graphics.Rendering.OpenGL':
      Perhaps you havent installed the profiling libraries for package 'OpenGL-2.4.0.1'?
...
Run Code Online (Sandbox Code Playgroud)

因此,问题是,与cabal通常的欢迎行为不同,cabal无法解析依赖关系并在需要分析库时安装它们.

我可以通过手动解析依赖项来解决它(通过跟踪编译一段时间后出现的错误):

$ cabal install -p OpenGLRaw --reinstall
$ cabal install -p StateVar --reinstall
$ cabal install -p …
Run Code Online (Sandbox Code Playgroud)

profiling haskell cabal

44
推荐指数
3
解决办法
1万
查看次数

我在哪里可以找到所有GHC扩展的列表

我想用,{-# LANGUAGE OverloadedStrings #-}但我忘记了它的名字.这种东西不具备hoogle功能,而且使用google*也需要一些时间.

是否存在一个GHC扩展列表,因为它们位于LANGUAGEpragma中?

*我的谷歌搜索旅程:

haskell ghc

38
推荐指数
3
解决办法
8707
查看次数

保存/加载+撤消/重做的机制,最小样板

我想创建一个用户可以编辑图表的应用程序(例如),它将提供以下标准机制:保存,加载,撤消和重做.

一个简单的方法是为图表及其中的各种形状提供类,通过保存和加载方法实现序列化,并且所有编辑它们的方法都返回UndoableAction可以添加到UndoManager调用其perform方法和将它们添加到撤消堆栈.

上述简单方法的问题在于它需要很多容易出错的样板工作.

我知道工作的序列化(保存/加载)部分可以通过使用像Google的Protocol Buffers或Apache Thrift这样的东西来解决,它会为你生成样板序列化代码,但它不能解决undo + redo问题.我知道对于Objective C和Swift,Apple提供了解决序列化和撤销的核心数据,但我不熟悉C++的类似内容.

是否有一个很好的方法非容易错误解决save + load + undo + redo只有很少的样板?

c++

26
推荐指数
4
解决办法
1374
查看次数

算法中如何使用线性代数?

我的几个同行已经提到"线性代数"在研究算法时非常重要.我研究了各种算法,并参加了一些线性代数课程,但我没有看到这种联系.那么算法中如何使用线性代数?

例如,有哪些有趣的东西可以用图表的连接矩阵?

algorithm linear-algebra

19
推荐指数
5
解决办法
6188
查看次数

避免"分享"的好方法?

假设有人将这个简单的Python代码翻译成Haskell:

def important_astrological_calculation(digits):
  # Get the first 1000000 digits of Pi!
  lucky_numbers = calculate_first_digits_of_pi(1000000)
  return digits in lucky_numbers
Run Code Online (Sandbox Code Playgroud)

Haskell版本:

importantAstrologicalCalculation digits =
  isInfixOf digits luckyNumbers
  where
    luckyNumbers = calculateFirstDigitsOfPi 1000000
Run Code Online (Sandbox Code Playgroud)

在使用Haskell版本之后,程序员惊讶地发现他的Haskell版本"泄漏"内存 - 在第一次调用他的函数之后,luckyNumbers永远不会被释放.这令人不安,因为该程序包含一些更类似的功能,并且所有这些功能所消耗的内存都非常重要.

是否有一种简单而优雅的方式使程序"忘记" luckyNumbers

haskell sharing

19
推荐指数
2
解决办法
774
查看次数

Generic LensLike喜欢映射和遍历

假设我想为以下内容创建一个"光学" MaybeT m a:

maybeTContents = _Wrapped .something. _Just

有这样的something吗?

maybeTContents将是例如Traversalm[],但只有Setterm(->) Int.

用法示例:

> MaybeT [Just 1, Nothing, Just 2] ^.. maybeTContents
[1, 2]
> runMaybeT (MaybeT (Just . ('e':)) & maybeTContents %~ ('H':)) "llo"
Just "Hello"
Run Code Online (Sandbox Code Playgroud)

haskell haskell-lens

19
推荐指数
2
解决办法
284
查看次数

Haskell:默认约束类型

考虑这个例子:

applyKTimes :: Integral i => i -> (a -> a) -> a -> a
applyKTimes 0 _ x = x
applyKTimes k f x = applyKTimes (k-1) f (f x)

applyThrice :: (a -> a) -> a -> a
applyThrice = applyKTimes 3
Run Code Online (Sandbox Code Playgroud)

3applyThrice通过GHC默认为一个Integer与编译时如图所示-Wall:

Warning: Defaulting the following constraint(s) to type 'Integer'
         'Integral t'
           arising from a use of 'applyKTimes'
Run Code Online (Sandbox Code Playgroud)

所以我猜这Integer是默认的Integral a => a.

  • 有没有办法为其他约束定义"默认类型"?
  • 使用默认类型不好的做法?(使用时确实抱怨-Wall …

haskell typeclass

18
推荐指数
1
解决办法
2980
查看次数

许多类型的String(ByteString)

我希望压缩我的应用程序的网络流量.

根据(最新的?)"Haskell流行度排名",zlib似乎是一个非常受欢迎的解决方案.zlib的界面使用ByteStrings:

compress :: ByteString -> ByteString
decompress :: ByteString -> ByteString
Run Code Online (Sandbox Code Playgroud)

我使用定期Strings,这也是由所使用的数据类型read,show以及Network.Socket:

sendTo :: Socket -> String -> SockAddr -> IO Int
recvFrom :: Socket -> Int -> IO (String, Int, SockAddr)
Run Code Online (Sandbox Code Playgroud)

所以要压缩我的字符串,我需要一些方法将a转换String为a ByteString,反之亦然.在hoogle的帮助下,我发现:

Data.ByteString.Char8 pack :: String -> ByteString
Run Code Online (Sandbox Code Playgroud)

试着用它:

Prelude Codec.Compression.Zlib Data.ByteString.Char8> compress (pack "boo")

<interactive>:1:10:
    Couldn't match expected type `Data.ByteString.Lazy.Internal.ByteString'
           against inferred type `ByteString'
    In the first …
Run Code Online (Sandbox Code Playgroud)

haskell bytestring

16
推荐指数
3
解决办法
4382
查看次数