我正在编写一个代表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 管道库,我正在尝试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) 我想构建一个函数,该函数采用给定的 Unicode 字符和给定的 TrueType 字体,并将相应的字形光栅化为二维 1 位/像素位图。
类似的东西:
rasterize :: Font -> Char -> Size -> Bitmap
rasterize font char size = ...
Run Code Online (Sandbox Code Playgroud)
该rasterize功能应该:
w和高度的位图h,使得w <= size和h <= 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 库已经可以做到这一点,或类似的东西?
评估表达式 …