小编jsk*_*jsk的帖子

通过利用多个类型类实例之间的对称来缩短代码

上下文

我正在编写一个代表SI前缀的Haskell模块:

module Unit.SI.Prefix where
Run Code Online (Sandbox Code Playgroud)

每个SI前缀都有相应的数据类型:

data Kilo = Kilo deriving Show
data Mega = Mega deriving Show
data Giga = Giga deriving Show
data Tera = Tera deriving Show

-- remaining prefixes omitted for brevity
Run Code Online (Sandbox Code Playgroud)

问题

我想编写一个函数,当应用两个SI前缀时,静态确定两个前缀中的哪一个更小.例如:

-- should compile:
test1 = let Kilo = smaller Kilo Giga in ()
test2 = let Kilo = smaller Giga Kilo in ()

-- should fail to compile:
test3 = let Giga = smaller Kilo Giga in () …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass functional-dependencies template-haskell

9
推荐指数
1
解决办法
329
查看次数

向下游发信号通知上游耗尽

使用Haskell 管道库,我正在尝试Pipe使用以下类型定义:

signalExhausted :: Monad m => Pipe a (Value a) m r 
Run Code Online (Sandbox Code Playgroud)

其中Value数据类型被定义为:

data Value a = Value a | Exhausted
Run Code Online (Sandbox Code Playgroud)

管道应遵守以下法律:

toList (each [] >-> signalExhausted) ==                 [Exhausted]
toList (each xs >-> signalExhausted) == map Value xs ++ [Exhausted]
Run Code Online (Sandbox Code Playgroud)

换句话说,管道应该相当于Pipes.Prelude.map Value,除了Exhausted在处理完所有上游值之后它应该产生额外的,使下游有机会执行一些最终操作.

可以这样Pipe定义吗?

> let xs = words "hubble bubble toil and trouble"
> toList $ each xs >-> signalExhausted
[Value "hubble", Value "bubble", Value "toil", …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-pipes

6
推荐指数
1
解决办法
159
查看次数

在 Haskell 中光栅化 TrueType 字体

我想构建一个函数,该函数采用给定的 Unicode 字符和给定的 TrueType 字体,并将相应的字形光栅化为二维 1 位/像素位图。

类似的东西:

rasterize :: Font -> Char -> Size -> Bitmap
rasterize font char size = ...
Run Code Online (Sandbox Code Playgroud)

要求

rasterize功能应该:

  • 产生最大宽度w和高度的位图h,使得w <= sizeh <= size
  • 光栅化字形,使其完全填充位图,不留任何填充。

Bitmap类型应支持以下操作(或类似操作):

width  :: Bitmap -> Int
height :: Bitmap -> Int
bit    :: Bitmap -> (Int, Int) -> Bool
Run Code Online (Sandbox Code Playgroud)

wherebit b (x, y)应该评估True是否(且仅当)b索引位置的Bitmap中的位(x, y)被设置。

是否有任何 Haskell 库已经可以做到这一点,或类似的东西?

例子

评估表达式 …

rendering haskell bitmap truetype rasterizing

5
推荐指数
0
解决办法
464
查看次数