我在PayPal的即时付款通知(IPN)和付款数据传输(PDT)之间选择时遇到了一些麻烦.
基本上,用户在我的网站上购买一次性产品,在PayPal上付款,然后返回我的网站.我理解IPN是如何工作的,但我现在看到我可以通过PDT更轻松地触发成功购买后发生的各种操作,因为数据会在那里返回然后(而不是需要单独的监听器) .
但是,PayPal的PDT文档包含了这条神秘的内容:"PDT并不适用于信用卡或快速结账交易." ......但我在这个主题上找不到任何进一步的内容.
信用卡真的不适合与PDT一起使用吗?我想要的不只是一句话.
这是否意味着用户必须拥有/创建PayPal帐户才能付款?
这是否意味着如果我想让用户直接用PayPal账户和/或信用卡付款,我必须实施IPN?
任何经历过这种情况的人都可以解决这些问题吗?
Hackage有几个monad变换器包:
(也许我错过了一些)
我们应该使用哪一个?
mtl是Haskell平台中的一个,但我一直听说reddit它是不酷的.
但无论如何,选择有什么不好,这不是一件好事吗?
好吧,我看到数据访问器的作者如何必须使所有这些满足流行的选择:
我想如果这种情况继续下去,例如几个竞争的箭头包演变,我们可能会看到类似:spoonklink-arrows-transformers,spoonklink-arrows-monadLib,spoonklink-tfArrows-transformers,spoonklink-tfArrows-monadLib,...
然后我担心如果spoonklink被分叉,Hackage将耗尽磁盘空间.:)
问题:
我想用分析编译我的程序,所以我运行:
$ 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) 我想用,{-# LANGUAGE OverloadedStrings #-}但我忘记了它的名字.这种东西不具备hoogle功能,而且使用google*也需要一些时间.
是否存在一个GHC扩展列表,因为它们位于LANGUAGEpragma中?
*我的谷歌搜索旅程:
我想创建一个用户可以编辑图表的应用程序(例如),它将提供以下标准机制:保存,加载,撤消和重做.
一个简单的方法是为图表及其中的各种形状提供类,通过保存和加载方法实现序列化,并且所有编辑它们的方法都返回UndoableAction可以添加到UndoManager调用其perform方法和将它们添加到撤消堆栈.
上述简单方法的问题在于它需要很多容易出错的样板工作.
我知道工作的序列化(保存/加载)部分可以通过使用像Google的Protocol Buffers或Apache Thrift这样的东西来解决,它会为你生成样板序列化代码,但它不能解决undo + redo问题.我知道对于Objective C和Swift,Apple提供了解决序列化和撤销的核心数据,但我不熟悉C++的类似内容.
是否有一个很好的方法非容易错误解决save + load + undo + redo只有很少的样板?
我的几个同行已经提到"线性代数"在研究算法时非常重要.我研究了各种算法,并参加了一些线性代数课程,但我没有看到这种联系.那么算法中如何使用线性代数?
例如,有哪些有趣的东西可以用图表的连接矩阵?
假设有人将这个简单的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?
假设我想为以下内容创建一个"光学" MaybeT m a:
maybeTContents = _Wrapped .something. _Just
有这样的something吗?
maybeTContents将是例如Traversal当m是[],但只有Setter当m是(->) 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) 考虑这个例子:
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)
该3在applyThrice通过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流行度排名",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 ×7
algorithm ×1
bytestring ×1
c++ ×1
cabal ×1
ghc ×1
haskell-lens ×1
listener ×1
monads ×1
payment ×1
paypal ×1
paypal-ipn ×1
paypal-pdt ×1
profiling ×1
sharing ×1
typeclass ×1