根据我的理解,HTTP/2带有状态头压缩称为HPACK.它不会改变HTTP协议的无状态语义吗?将Web应用程序视为HTTP/2无状态协议是否安全?最后,是否HTTP/2兼容现有的负载均衡器?
QuantifiedConstraints1已经登陆GHC 8.6,我正在阅读最初建议的衍生类型(第7节) 2.但是,在操作方面,我无法理解如何QuantifiedConstraints将其翻译成字典.以下是该文件的摘录.
我们需要的是一种简化谓词的方法
f (GRose f a).诀窍是采取我们在Binary (List a)上面假设的"常量"实例声明,并对其进行抽象:
instance (Binary a,
forall b. (Binary b) => Binary (f b)
) => Binary (GRose f a) where
showBin (GBranch x ts ) = showBin x ++ showBin ts
Run Code Online (Sandbox Code Playgroud)
现在,以及
(Binary a)上下文还包含多态谓词.这个谓词用于将谓词简化Binary (f (GRose f a))为justBinary (GRose f a),我们有一个实例声明.从操作术语来看,
(Binary a)上下文中的谓词对应于为类传递字典Binary.谓词forall b. Binary b => Binary (f b)对应于将字典转换器传递给函数.
特别是我不能理解以下内容:
1)将谓词简化Binary …
当我在做haskell-excercises问题时。我看到以下代码Constraint通过将每种类型应用于 Constraint 构造函数来创建聚合。在 GHC 中,Constraints 的深层嵌套元组似乎仍然是一种Constraint(也许是扁平化的?)。
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
type family All (c :: Type -> Constraint) (xs :: [Type]) :: Constraint where
All c '[] = ()
All c (x ': xs) = (c x, All c xs)
-- >>> :kind! All
-- All :: (* -> Constraint) -> [*] -> Constraint
-- = All
-- >>> :kind! …Run Code Online (Sandbox Code Playgroud) 我在Mac OS 10.8.2中使用valgrind 3.8.1我使用Homebrew安装了Valgrind.
但是当我尝试在我的代码上运行valgrind时,我从库中得到了一大堆错误,我甚至没有在我的代码中使用过.
valgrind --leak-check=full ./a.out
==92079==
==92079== HEAP SUMMARY:
==92079== in use at exit: 70,861 bytes in 362 blocks
==92079== total heap usage: 529 allocs, 167 frees, 75,151 bytes allocated
==92079==
==92079== 16 bytes in 1 blocks are definitely lost in loss record 7 of 85
==92079== at 0x54D7: malloc_zone_malloc (in /usr/local/Cellar/valgrind/3.8.1/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
==92079== by 0x373381: recursive_mutex_init (in /usr/lib/libobjc.A.dylib)
==92079== by 0x372025: _objc_init (in /usr/lib/libobjc.A.dylib)
==92079== by 0xBB27: libSystem_initializer (in /usr/lib/libSystem.B.dylib)
==92079== by 0x7FFF5FC13377: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) …Run Code Online (Sandbox Code Playgroud) 我目前正在Haskell学习Applicatives.如果我没有错,则列表有两个不同的Applicative实例(List和ZipList- 第二个被定义为包装List值的newtype).该ZipList应用性情况下,似乎对我来说更直观.
这可能是一个愚蠢的问题,但是有一个特定的原因ZipList不是列表的默认应用实例.
pure (+) <*> [1,2,3] <*> [4,5,6]
-- [5,6,7,6,7,8,7,8,9]
pure (+) <*> ZipList [1,2,3] <*> ZipList [4,5,6]
-- ZipList [5,7,9]
Run Code Online (Sandbox Code Playgroud)
是因为Applicative List的分布式版本也恰好有Monad实例吗?
我正在看FoldableHaskell 的课程.方法二fold,foldMap需要一个Monoid的实例.但是,foldr或者foldl没有任何这样的约束.
fold :: Monoid m => t m -> m
foldMap :: Monoid m => (a -> m) -> t a -> m
foldr :: (a -> b -> b) -> b -> t a -> b
foldl :: (b -> a -> b) -> b -> t a -> b
Run Code Online (Sandbox Code Playgroud)
对于foldr/ foldl等效的结果,是否应该限制给定的折叠函数是关联的?有没有例子,foldr/foldl的结果在同一个列表中是不同的?
不可折叠的实例不应包含Monoidal值吗?或者可折叠更一般?
我目前正在读关于另类/ MonadPlus类型类维基教科书.它很好地描述了这种差异.然而,一个令人费解的部分是guard我假设的函数用于"短路"计算.(我对吗?)
guard虽然定义的函数Control.Monad有一个Alternative约束,如下(链接).
guard :: (Alternative f) => Bool -> f ()
guard True = pure ()
guard False = empty
Run Code Online (Sandbox Code Playgroud)
但是上面的文章提到只MonadPlus需要强制执行左零和零零定律(因此更强的主张).
mzero >>= f = mzero -- left zero
m >> mzero = mzero -- right zero
Run Code Online (Sandbox Code Playgroud)
鉴于guard函数的目的,不应该用MonadPlus约束来定义它吗?如果guard应该"短路"计算,我们不需要更强的定律吗?我很好奇特定设计选择背后的原因.
ps:我不知道什么是比"短路"这个词更好的描述"取消前期计算"行为的方法?
在阅读关于阴谋地狱的消息时,我有点困惑,因为该术语超载了。我猜最初是Cabal Hell提到了菱形依赖问题,此问题通过限制构建计划以使每个构建计划中的任何软件包都只有一个版本来解决(单个构建计划中不能存在两个不同版本的软件包)如此答案所述。
但是,该术语还用于其他各种情况。例如破坏性的重新安装,不正确的软件包依赖项边界(较低/较高版本边界),不一致的环境……(或Cabal报告的任何其他错误)。
其中,我特别困惑于1)破坏性的重新安装和2)不一致的环境?它们是什么意思,以及如何cabal new-build解决这些问题(就像sandbox一样cabal sandbox)?和什么样的作用ghc-pkg在这方面发挥?
可以重现这些问题的任何参考文献或简单示例,将不胜感激。
关于“破坏性的重新安装”:如果我没看错,GHC本身就有一个软件包管理器(ghc-pkg),并且这些软件包安装为可动态链接的库,即:base依靠ghc-prim,因此,如果ghc-prim将其删除,它将中断base,对吗?并且由于GHC仅允许使用相同版本的软件包的一个实例,因此cabal install可能会注册相同版本的更新版本(package, version),从而破坏未注册软件包的依赖项。如果以上关于“破坏性重新安装”的理解是正确的;如何做cabal new-build帮助在这里?
AFAIK GHC8的新增功能之一是ApplicativeDo语言扩展,如果可能的话,它会将相应的Applicative方法(<$>,<*>)取消.我有以下问题.
它是如何决定是否可以使用desugaring Applicative方法?据我所知,它进行依赖性检查(如果后者取决于前者的结果)来确定资格.还有其他标准吗?
虽然这个添加使得应用程序代码更容易阅读没有任何Monad实例的类(可能?).但对于具有Monad和Applicative实例的结构:这是一种推荐的做法(从可读性的角度来看)?还有其他好处吗?
在Haskell中,类型的"类型"称为Kinds,表示为*.如:
Maybe :: * -> *
Either :: * -> * -> *
Run Code Online (Sandbox Code Playgroud)
我想知道Haskell或其他强类型语言中的"类型"是否有任何等价物?
它们有什么实际意义吗?是否有任何案例证明它们非常有用?
任何对某些材料的提及都将不胜感激.
haskell ×8
applicative ×2
monads ×2
architecture ×1
cabal ×1
debugging ×1
fold ×1
foldable ×1
http ×1
http2 ×1
macos ×1
malloc ×1
memory-leaks ×1
monoids ×1
polykinds ×1
protocols ×1
type-systems ×1
typeclass ×1
valgrind ×1