对于练习,我一直在尝试使用函数ap和liftM来实现liftM2.功能定义为:
ap :: IO (a -> b) -> IO a -> IO b
liftM :: (a -> b) -> IO a -> IO b
liftM2 :: (a -> b -> c) -> IO a -> IO b -> IO c
Run Code Online (Sandbox Code Playgroud)
我可以使用do notation轻松做liftM2,但不知道如何使用ap和liftM来做到这一点.我想将结果看起来像这样:
liftM2 f a b = liftM (_) (ap _ a)
Run Code Online (Sandbox Code Playgroud)
我很困惑如何弄乱f,这是(a - > b - > c),这样我就可以将a转为b,b转为c.谢谢.
这可能是一个菜鸟问题,但我对提供商的工作方式感到困惑。我尝试阅读此https://docs.oracle.com/javase/7/docs/technotes/guides/security/overview/jsoverview.html,但它对我来说不太有意义。假设我们有:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC")
Run Code Online (Sandbox Code Playgroud)
和
Cipher cipher= Cipher.getInstance("AES/CBC/PKCS5Padding")
Run Code Online (Sandbox Code Playgroud)
根据链接,听起来提供商指示了正在使用的实现,但 AES/CBC/PKCS5Padding 基本上与提供商无关吗?在这个例子中,充气城堡(我猜“BC”对应的)是否碰巧有比默认实现更有效的算法?感谢您的时间。