我不确定是什么导致了这个问题,但在一个项目中,我正在构建,编译器花费数小时来编译模块.我的代码库总大小为352KB,但没有一个模块超过10KB.我使用的是Native端口,但它非常简单; 我只是Date.now()
拿着它.
是否有任何众所周知的会导致elm编译器永远编译?我没有很多依赖项,但我经常使用Html.我真的很感激任何会导致这种情况的提示.
因此事实证明,大型案例表达式将导致优化器花费很长时间,从0.16开始.以下是关于提出问题的Elm-Discuss的讨论,以及讨厌的案例匹配的要点.
我想要冗长并且保留胡萝卜,为什么elm的编译器会采用这种方式进行大小写匹配?这里的底层机器是什么?为什么编译器需要花费超过一个小时来优化案例陈述中的60多个模式匹配?
我目前正试图运行
原子编辑器
中bash
壳,从fish
壳.重要的是,我跑atom
的bash
,因为IDE-哈斯克尔如何处理ghc-mod
路径的分辨率,和其他一些标准化的问题.
我是这样做的:
#~/.config/fish/config.fish
function start-atom
bash $HOME/lib/atom/bin/Atom/atom $argv
end
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行start-atom
时fish
,我收到以下错误:
/home/athan/lib/atom/bin/Atom/atom: /home/athan/lib/atom/bin/Atom/atom: cannot execute binary file
Run Code Online (Sandbox Code Playgroud)
即使我知道这个文件是正确的和可执行的.有任何想法吗?谢谢!
我最近一直在玩弄-XDataKinds
,并想知道为什么Foo
下面不会自动提升:
{-# LANGUAGE
GADTs
, DataKinds
, KindSignatures #-}
import Data.HList
data Foo a where
Foo :: Bar a =>
a -> Foo a
data Baz where
Baz :: (a ~ HList (l :: [Foo *])) =>
a -> Baz
Run Code Online (Sandbox Code Playgroud)
也就是说,Baz
是一个异类的列表Foo a
,其中a
受到约束Bar
.
有没有办法手动创建此数据类型的升级版本?我该怎么做呢?可以申报种类吗?我可以制作一个虚拟的Haskell98版本Foo
,并将其分成模块或其他东西吗?理想情况下,我想保留约束上下文,但我认为没有Constraint
一种.任何想法都会非常有用!
我最近一直在玩-XDataKinds
,并希望采用类型系列的升级结构构建,并将其拉回到价值水平.我相信这是可能的,因为组成组件非常简单,终端表达式也很简单.
我想降级/反映简单的玫瑰树Strings
,它们成为类型Tree Symbol
(当GHC.TypeLits.Symbol
用作类型级别的字符串时).这是我的样板代码:
{-# LANGUAGE DataKinds #-}
import GHC.TypeLits
import Data.Proxy
data Tree a = Node a [Tree a]
type TestInput = '[ 'Node "foo" '[ 'Node "bar" '[]
, 'Node "baz" '[]
]
, 'Node "bar" '[]
]
Run Code Online (Sandbox Code Playgroud)
这是一个简单的类型级玫瑰森林,看起来像这个非常详细的图表:
*-- "foo" -- "bar"
| \_ "baz"
\_ "bar"
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想遍历这个结构并给予1到1映射回值类型的*
,但不是很明显如何做到这一点不均匀,同时还携带,在(必要的)情况下,因超载.
vanila on #haskell
建议我使用类型类绑定两个世界,但它似乎比我想象的要复杂一点.我的第一次尝试尝试通过实例头部约束对类型级别模式匹配的内容进行编码,但是我的关联类型(用于编码*
映射的-kinded类型结果)重叠 - 显然实例头部在某种程度上被GHC忽略.
理想情况下,我还希望列表和树的反射是通用的,这似乎会导致问题 - 就像使用类型类来组织类型/类型层.
这是我想要的非功能性示例:
class Reflect …
Run Code Online (Sandbox Code Playgroud) 我有两个正在开发的软件包,A
而且B
.套餐B
取决于A
.
A
它是在自己的沙盒中开发的,类似的故事也适用于B
:
A> cabal sandbox init
A> cabal install --enable-shared
B> cabal sandbox init
B> cabal sandbox add-source ../A/
B> cabal install
Run Code Online (Sandbox Code Playgroud)
还要注意那shared: True
是我的~/.cabal/config
.
这里的一切看起来都不错,它们都安装得很好.但是,在工作时B
,如果我发出cabal repl
,cabal-install告诉我它无法加载libAsomething.so/.dll
文件.这里出了什么问题?
这是确切的错误:
...
Loading package mtl-0.0.1 ... linking ... done.
Loading package A-0.0.0 ... <command line>: can't load .so/.DLL for: /home/athan/dev/A/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.3/A-0.0.0/libHSA-0.0.0-ghc7.8.3.so (/home/athan/dev/foo/B/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.3/A-0.0.0/libHSA-0.0.0-ghc7.8.3.so: undefined symbol: AsomethingCrazyInAmodule_closure)
Run Code Online (Sandbox Code Playgroud)
编辑:
我正在使用GHC 7.8.3和cabal-install 1.20.0.3.
这个问题是为 Yew v0.19 编写的
异步外部 JavaScript 函数可以通过Closures在 Rust 中使用,作为传入的函数:
#[wasm_bindgen]
extern "C" {
fn setInterval(closure: &Closure<dyn FnMut()>, time: u32) -> i32;
}
// ...
let cb = Closure::new(|| {
log("interval elapsed!");
});
let interval_id = setInterval(&cb, 1_000);
Run Code Online (Sandbox Code Playgroud)
这对于迂腐的例子来说很好,但是Closure
有一个关键的要求 - 所应用的函数需要有一个'static
生命周期。同样,对于 Yew 应用程序,自发响应的完美机制是枚举Message
,并将其update()
命名为Model
. 然而,(发出消息的)link()
机制没有静态生命周期。Context
在理想的情况下,提交给闭包的值可以仅作为 Yew 组件消息应用:
struct Model {
thing: Option<JsValue>,
}
enum Msg {
GotThing(JsValue),
}
#[wasm_bindgen]
extern "C" {
fn createThing(closure: &Closure<dyn …
Run Code Online (Sandbox Code Playgroud) 是否有可能具有完全类型模糊的功能?该函数是否具有类型签名:
Poly :: a -> a
Run Code Online (Sandbox Code Playgroud)
其中a是类型变量,就像类型构造函数声明或类型类要求一样使用的语法?
data TypeConstructor a = One | Two a
Func :: Num a => a -> a
Run Code Online (Sandbox Code Playgroud)
是否有可能创建一个无处不在的id
函数,始终返回它自己的值,而不必知道正在使用的构造函数是什么?
id :: a -> a
Run Code Online (Sandbox Code Playgroud) Haskell如何翻译[
并]
进入列表定义?他们是否重视构造者或其他什么?他们是新类型吗?有没有办法定义一个outfix语法,而不是一个中缀语法?
这是我的代码:
test :: (Num a) => [a] -> a
test [] = 0
test [x:xs] = x + test xs
Run Code Online (Sandbox Code Playgroud)
然而,当我通过ghci运行它时:l test
,我收到此错误:
[1/1]编译Main(test.hs,解释)
test.hs:3:7:
Couldn't match type `a' with `[a]'
`a' is a rigid type variable bound by
the type signature for spew :: Num a => [a] -> a at test.hs:2:1
In the pattern: x : xs
In the pattern: [x : xs]
In an equation for `spew': spew [x : xs] = x + spew xs …
Run Code Online (Sandbox Code Playgroud) haskell ×7
data-kinds ×2
bash ×1
cabal ×1
callback ×1
closures ×1
elm ×1
enumeration ×1
executable ×1
fish ×1
gadt ×1
list ×1
mcrypt ×1
nixos ×1
php ×1
recursion ×1
reflection ×1
rust ×1
syntax ×1
typeclass ×1
types ×1
wasm-bindgen ×1
yew ×1