如何在程序启动时在elm中设置页面标题?
我在文档中找到了这个:(http://elm-lang.org/docs/syntax)
Elm有一些内置的端口处理程序,可以自动采取一些必要的操作:
title设置页面标题,忽略空字符串
但是我仍然无法完全绕过端口,也无法找到正在使用的特定端口的任何示例.所以我不知道,例如,甚至端口的类型签名.
我知道我可以通过制作我自己的index.html并将elm程序嵌入其中来做到这一点,但我想在榆树本身中解决这个问题,即使没有其他原因也要了解它是如何完成的.(并希望了解有关端口的信息......)
我正在使用:Mac OS X 10.10,GHC 7.10.2(Haskell Platform),Cabal 1.22
我正在尝试在Haskell中创建一个静态链接库。目的是提供一个具有C兼容ABI的库,以供跨平台和跨语言使用。预计该库的所有使用者都不能在Haskell中实现,因此与C兼容的ABI至关重要,因为易于分布所得库。
我的问题是,所有FFI教程/示例都没有使用第三方模块,甚至几乎没有提及cabal。这两个都是我的先决条件。当我遵循一个简单的FFI教程时,它可以工作,但是一旦我放入了一个第三方模块,它对我来说就失败了。
我创建了一个非常简单的示例,详细说明了我的问题,网址为:https : //github.com/tomkludy/ffihell
如果使用构建库cabal configure;cabal build,则将在dist\build名为的库中找到libHSffihell-0.1.0.0-70CjWiqse6C2Al3vL5a4k7(后跟.a,_p.a和-ghc7.10.2.dylib)。
问题1:库的每次命名都不同。每次构建库时,如何使名称相同?
如果然后通过修改build_c.sh以指向正确的库名称来构建使用该程序的C程序(tryit.c),它将起作用:
> ghc tryit.c -Idist/build -Ldist/build -lHSffihell-0.1.0.0-70CjWiqse6C2Al3vL5a4k7 -no-hs-main -o tryit
> ./tryit
foo 4: 5
Run Code Online (Sandbox Code Playgroud)
但是,如果您在Foo.hs中取消注释这些行,则导致其拉入Data.Text库:
{-# LANGUAGE ForeignFunctionInterface, OverloadedStrings #-}
module Foo where
import qualified Data.Text as T
foreign export ccall foo :: Int -> IO Int
foo :: Int -> IO Int
foo n = return $ n + 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个结构,它接受一个输入字符串(并取得它的所有权),进行一些计算,然后返回一个包含该字符串和一些预先计算的字符串切片的结构。
就像是:
pub async fn read_file<'a>(path: &Path) -> Result<MyString<'a>> {
let contents = tokio::fs::read_to_string(path).await?;
let slice = costly_search(&contents);
Ok(MyString::new(contents, slice))
}
pub struct MyString<'a>
{
slice: &'a str,
string: String,
}
impl<'a> MyString<'a> {
pub fn new(string: String, slice: &'a str) -> MyString<'a> {
MyString { string, slice }
}
pub fn get_slice(&self) -> &str {
self.slice
}
}
Run Code Online (Sandbox Code Playgroud)
文件contents可能很大,所以我不想复制它。该函数costly_search可能需要一些时间来计算,但总是返回其输入的一部分;该切片也很大,所以我不想将该切片复制到新字符串中。这也被简化了;我将在结构中有多个输入字符串切片,消费者可以传递整个内容并根据需要使用预先计算的切片。
当我尝试编译它时,我得到:
`contents` does not live long enough
borrowed value does not live long enough
utils.rs(43, 31): …Run Code Online (Sandbox Code Playgroud)