GHC拥有一些有用的语言扩展,可用于机械化推导出各种常见的Haskell类型类(-XDeriveFunctor,-XDeriveFoldable,-XDeriveTraversable)。似乎Applicative是另一个经常需要且通常很容易派生的类。对于包含类型为a 的简单记录,例如:dat...
在Haskell中,您可以使用"deriving"关键字自动派生 "Functor"、"Foldable"和"Traversable"。但是,无法自动派生" Applicative"。考虑到定义Applicative实例的一个显然的方法(即通过zip应用),难道没有任何方法可以启用" deri...
我不确定我在这里做错了什么:data Vector2D u = Vector2D { _x :: u, _y :: u } deriving stock (Show, Eq, Functor, Foldable, Traversable) {-# INLINE addV...
我正在尝试使用这篇博客中的高阶数据方法,避免在量化约束推导时出现无用的Identity函子。 {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE QuantifiedConstraints, StandaloneDeriving, UndecidableIn...
考虑以下示例程序: next :: Int -> Int next i | 0 == m2 = d2 | otherwise = 3 * i + 1 where (d2, m2) = i `divMod` 2 loopIteration :: MaybeT (St...
举个简单的例子,假设我想要一个类型来表示井字棋的标记: data Mark = Nought | Cross 这与Bool相同。 Prelude> :info Bool data Bool = False | True -- Defined in ‘GHC.Types’ ...