我正在使用diagramshaskell 包,我正在使用 SVG 后端。我将 SVG 标记直接嵌入到 HTML 文档中,以便将图形作为网页的一部分。我已经构建了一个非常酷的条形图,我想为它添加一些基本的交互性。例如,当您将鼠标悬停在一个栏上时,我想让颜色变浅。或者也许也会弹出一些东西。我想要实现这一点的方法是设置class一些 SVG 节点的属性。这可以用diagrams包吗?我知道它可以针对多个后端,并且该class属性在大多数后端中可能没有有意义的对应物,但我想知道是否仍然有一种方法可以潜入特定于后端的信息。感谢任何人都可以提供的任何见解。
我正在使用pandoc(不是命令行上的可执行文件,而是haskell库),我正在生成HTML输出.我无法使目录显示在输出中.粗略地说,我有这个:
...
writeHtml (def {writerTOCDepth = 4, writerTableOfContents = True} m)
where m =
[ Header 1 ("myIdentifier",[],[]) [Str "Vulnerabilities"]
, Div nullAttr otherStuff
]
Run Code Online (Sandbox Code Playgroud)
我觉得仅凭这一点就足以让HTML输出带有一个简单的目录(只有一个链接到Vulnerabilities部分的链表).如果有人看到我错过了什么,我将不胜感激.
编辑
我认为这个问题与我需要设置有关writerStandalone = True,但是当我这样做时,生成的文档完全是空白的.
我正在使用GHC 7.10.2.有一个名为类型类RenderRoute中yesod,看起来像这样:
class Eq (Route a) => RenderRoute a where
data Route a
renderRoute :: Route a -> ([Text], [(Text, Text)])
Run Code Online (Sandbox Code Playgroud)
我在一个名为的模块中编写了一个实例,Yesod.Crud如下所示:
data Crud master p c = Crud { ... }
instance (PathPiece (Key c), Eq (Key c), PathPiece p, Eq p) => RenderRoute (Crud master p c) where
data Route (Crud master p c)
= EditR (Key c)
| DeleteR (Key c)
| IndexR p
| AddR p
| ViewR (Key c) …Run Code Online (Sandbox Code Playgroud) 我想知道是否有Applicative可以跟踪已经发生了多少应用操作.我尝试按如下方式实现它:
import Control.Applicative
main :: IO ()
main = print $ run 1 $ (,,,) <$> FromInt id <*> FromInt id <*> FromInt id <*> FromInt id
data FromInt a = FromInt (Int -> a)
run :: Int -> FromInt a -> a
run i (FromInt f) = f i
instance Functor FromInt where
fmap g (FromInt f) = FromInt (g . f)
instance Applicative FromInt where
pure a = FromInt (const a)
FromInt f <*> FromInt g …Run Code Online (Sandbox Code Playgroud) 在postgres中,有一个函数pg_typeof可以给出一个字段的类型.例:
-- Original query
select name, age, descriptions from things LIMIT 1;
-- Meta query
select pg_typeof(name), pg_typeof(age), pg_typeof(descriptions) from things LIMIT 1;
pg_typeof | pg_typeof | pg_typeof
-------------------+-----------+-----------
character varying | integer | text[]
Run Code Online (Sandbox Code Playgroud)
这是一个非常酷的功能.我感兴趣的是如何在空表上执行类似的技术.如果things表中没有任何内容,则上一个命令不返回任何行.仅从查询中,我希望能够查看查询的结果列的类型.请注意,我所要求的不是获取表的列类型.我已经知道了information_schema.columns.设想一个不能整齐地映射到表行的查询或具有大量FK约束的情境.我不想创建虚拟数据以使上述技术有效.如果有人知道这样做的方法(我知道F#有一个带有一些魔法的库),我将不胜感激.如果问题不清楚,请告诉我如何改进它.谢谢.
我正在尝试编写以下函数:
memcpyByteArrayToPtr ::
ByteArray# -- ^ source
-> Int -- ^ start
-> Int -- ^ length
-> Ptr a -- ^ destination
-> IO ()
Run Code Online (Sandbox Code Playgroud)
行为应该在内部用于memcpy将a的内容复制ByteArray#到Ptr.我有两种技术可以做这样的事情,但我很难推断他们的安全.
第一个是在内存包中找到的.有一个辅助函数withPtr定义为:
data Bytes = Bytes (MutableByteArray# RealWorld)
withPtr :: Bytes -> (Ptr p -> IO a) -> IO a
withPtr b@(Bytes mba) f = do
a <- f (Ptr (byteArrayContents# (unsafeCoerce# mba)))
touchBytes b
return a
Run Code Online (Sandbox Code Playgroud)
但是,我很确定这只是安全的,因为构建的唯一方法Bytes是使用一个调用的智能构造函数newAlignedPinnedByteArray#.给出类似问题和 …
我正在使用带有reflex平台的nix来使用GHCJS 8.0.1将haskell编译为javascript.我编写了一些依赖于text库中内部模块的函数:Data.Text.Internal.我唯一需要的是数据构造函数Text:
data Text = Text
{-# UNPACK #-} !A.Array -- payload (Word16 elements)
{-# UNPACK #-} !Int -- offset (units of Word16, not Char)
{-# UNPACK #-} !Int -- length (units of Word16, not Char)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用GHCJS编译使用此数据构造函数的代码时,它会失败.错误消息清楚地表明,某处,某处,数据构造函数Text已被替换为:
newtype Text = Text JSString
Run Code Online (Sandbox Code Playgroud)
我知道我可以放置#ifdef代码块来解决这个问题.但是,我无法弄清楚这个数据构造函数替换是如何完成的.这在任何地方都没有提到ghcjs-shims.它没有提到ghcjs.甚至更奇怪的是,它ghcjs-base具有使用普通数据构造函数的函数Text.如果有人能指出我替换的来源,我将不胜感激.
编辑:这与问题无关,但我需要使用内部的原因Text是有效地编码IPv4地址和MAC地址等内容.在我之前的问题中包含的基准测试中,我发现使用公共API的最快IPv4编码text花费了大约450ns.使用内部(并直接写入可变数组),我可以在大约35ns内完成此操作,这至少在性能上提高了10倍.
编辑2:我记得的其他东西(可能与问题有关)是在我的代码中的另一个地方,我使用hexadecimal过Data.Text.Lazy.Builder.Int.但是,使用ghcjs时,此模块不会导出此函数.我很乐意在某个地方上游贡献它,但由于我不明白所有模块text是如何被填满的,我不知道适当的上游在哪里.如果有人能指出我完成此任务的具体文件,我将不胜感激.
假设我们有三个通过HTTP获取数据的同步函数(这些函数可能是内部的API调用):
lookupUser :: String -> IO UserId
lookupUserCity :: UserId -> IO City
lookupLocation :: City -> IO Location
Run Code Online (Sandbox Code Playgroud)
所以,我可以做monadic组合lookupLocation <=< lookupUserCity <=< lookupUser来获取用户的位置.但是,由于每个调用都会阻塞,这将阻止程序的其余部分运行.
显然,continuation有助于解决这个问题,但我找不到任何真实的例子.我认为签名会被重写a -> ContT r IO b,但我不知道如何用这个来实现类似回调的模式.如果有人能告诉我(1)如何写作transform :: (a -> IO b) -> (a -> ContT r IO b)或(2)可以链接到某人这样做的真实例子,我将不胜感激.