作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Scale 的概念,它在输入域和输出范围之间进行转换。然而,有几种类型的秤;每个都支持可能操作的子集并存储略有不同的范围。
例如:
一个 Continuous
具有域 Scale (Float, Float) (Float, Float)
的比例 ((Float, Float)
)和范围 (Float, Float)
支持:
convert : Continuous -> Float -> Float
将值从域转换为范围。 invert : Continuous -> Float -> Float
将值从范围转换回域。 domain : Continuous -> (Float, Float)
返回域。 ticks : Continuous -> List Float
返回适合在轴上绘制的值。 Sequential
scale 的域为
(Float, Float)
以及来自
Float -> a
的函数,存储范围通常没有多大意义。
convert : Sequential a -> Float -> a
将值从域转换为范围。 domain : Sequential a -> (Float, Float)
返回域。 Quantile
scale 将采样的输入域 (
List Float
) 映射到离散范围 (
List a
)。该域被认为是连续的;但是,域被指定为一组离散的样本值。
convert : Quantile a -> Float -> a
将值从域转换为范围。 invertExtent : Quantile a -> a -> (Float, Float)
从与范围相对应的域中返回一个范围。 identity
),在其他情况下则没有合理的实现。能够在所有可能的范围内或在支持特定操作的所有范围内指定通用算法也非常有用。
Scale supportsOp1 supportsOp2 supportsOp3
的类型其中每个类型变量的类型都可以是 SupportsOp
或 Doesnt
.然后我可以有一个功能,例如op1 : Scale SupportsOp a b -> c
.这可以解决问题,但类型注释非常难看。此外,我不完全确定如何处理实际存储实际类型的范围和域的类型。 最佳答案
是否可以定义单一类型 Scale a
以及 scale 的每个子类作为不同的构造函数?
type Scale a
= Continuous (Float, Float) (Float, Float)
| Sequential (Float, Float) (Float -> a)
| Quantile (List Float) (Float -> a)
Sequential
和
Quantile
两者都需要类型参数,而
Continuous
没有,所以这有点难看。
Continuous
的类型参数有意义吗?让其中一个值让它更干净一点?
case
陈述。
convert : Scale a -> Float -> a
convert scale val =
case scale of
Continuous domain range -> ...
Sequential domain mapper -> ...
Quantile domain mapper -> ...
Maybe a
并返回
Nothing
在不受支持的操作上?虽然您无法在函数调用之前确定支持,但您至少必须显式处理
Nothing
值被返回,这最终成为事后检查支持的方式。
invertExtent : Scale a -> a -> Maybe (Float, Float)
invertExtent scale val =
case scale of
Continuous _ _ -> Nothing
Sequential _ _ -> Nothing
Quantile domain mapper -> Just (...)
关于elm - 设计多态API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39020620/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!