- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
mconcat (map comparing [length, last, id]) "abc" "def"
这当然不会进行类型检查。该列表包含从相同域到不同共域的函数。但我希望意图是明确的。某些类型注释或其他解决方法(不将比较放在 3 个位置或类似的地方)可以使其工作吗?
最佳答案
只要您不介意不将函数放在列表中,一切都会很顺利:
GHCi> :t comparing length <> comparing last <> comparing id
comparing length <> comparing last <> comparing id
:: Ord a => [a] -> [a] -> Ordering
GHCi> (comparing length <> comparing last <> comparing id) "abcd" "abc"
GT
GHCi> (comparing length <> comparing last <> comparing id) "abd" "abc"
GT
GHCi> (comparing length <> comparing last <> comparing id) "aac" "abc"
LT
这利用了函数的幺半群实例(结果上的幺半群)和排序
的实例(它执行 the intuitvely obvious thing )。
鉴于您提供给比较
的投影函数的结果类型实际上并未出现在最终结果中,如果您确实想要一个列表,您可以诉诸存在类型:
{-# LANGUAGE GADTs #-}
import Data.Ord
data Measurement a where
Measurement :: Ord b => (a -> b) -> Measurement a
comparingHet :: Measurement a -> a -> a -> Ordering
comparingHet (Measurement f) = comparing f
GHCi> criteria = [Measurement length, Measurement last, Measurement id]
GHCi> mconcat (comparingHet <$> criteria) "aac" "abc"
LT
GHCi> foldMap comparingHet criteria "aac" "abc" -- Alternative spelling.
LT
或者,您可以使用 Comparison
from Data.Functor.Contravariant
,只是稍微不那么整洁:
GHCi> import Data.Functor.Contravariant
GHCi> criteria = Comparison <$> [comparing length, comparing last, comparing id]
GHCi> getComparison (mconcat criteria) "aac" "abc"
LT
关于sorting - 根据异构标准进行 map 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42662178/
我有一个 NSTreeController (向 NSOutlineView 提供内容)。我希望顶级对象属于一个类,而所有其他对象(因此,任何级别的子对象)属于另一个类。解决这个问题的最佳方法是什么?
我有一个如下所示的 GADT data MyTypes = MyInt | MyDouble data Test (t :: MyTypes) where A :: Int -
我需要一个高效的异构数组,其中第一个元素是 int,其余是 float。然而,创建它之后,基本的数组操作就会呈爆炸式增长。 A = np.zeros(1, dtype='i4, f4, f4') B
我有一个 pandas DataFrame,其中包含需要拆分成平衡切片的字符串和浮点列,以便训练 sklearn 管道。 理想情况下,我会使用 StratifiedKFold在 DataFrame 上
是否有一种异构容器的形式,能够存储例如不同的基本类型(例如int、float、double)? 最终我希望能够在计算中使用元素而无需显式引用类型,例如 auto res = a + b,其中操作数 a
假设我有一个结构(或类),如下所示: struct _particle { std::vector vx , vy; std::vector id; std::vector rx, ry; }; ty
我在将具有 > 22 列的表专门映射到 case class 时遇到问题,假设您有以下代码 import slick.driver.PostgresDriver import scala.slick.
我是一名优秀的程序员,十分优秀!