小编Ath*_*ark的帖子

榆树编译器永远运行,电脑刚刚变热

我不确定是什么导致了这个问题,但在一个项目中,我正在构建,编译器花费数小时来编译模块.我的代码库总大小为352KB,但没有一个模块超过10KB.我使用的是Native端口,但它非常简单; 我只是Date.now()拿着它.

是否有任何众所周知的会导致elm编译器永远编译?我没有很多依赖项,但我经常使用Html.我真的很感激任何会导致这种情况的提示.

编辑

因此事实证明,大型案例表达式将导致优化器花费很长时间,从0.16开始.以下是关于提出问题的Elm-Discuss的讨论,以及讨厌的案例匹配要点.

我想要冗长并且保留胡萝卜,为什么elm的编译器会采用这种方式进行大小写匹配?这里的底层机器是什么?为什么编译器需要花费超过一个小时来优化案例陈述中的60多个模式匹配?

haskell pattern-matching switch-statement elm

98
推荐指数
1
解决办法
3253
查看次数

Nix可组合派生选项

我正在尝试configuration.nix通过搜索pkgsnixpkgs源代码树的子文件夹,选择模块的定义以了解可用选项来了解我在特定程序中可用的选项.但是,我遇到了一个麻烦的PHP案例- 它是一个特殊的派生,一个可组合的派生.我无法看到我用PHP提供的选项 - 这对于启用mcrypt,gd等特殊模块非常有帮助.任何对此的帮助都将非常感谢!

php configuration mcrypt nixos

30
推荐指数
1
解决办法
1154
查看次数

鱼壳和执行程序从bash通过`function`

我目前正试图运行 原子编辑器 bash,fish.重要的是,我跑atombash,因为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-atomfish,我收到以下错误:

/home/athan/lib/atom/bin/Atom/atom: /home/athan/lib/atom/bin/Atom/atom: cannot execute binary file
Run Code Online (Sandbox Code Playgroud)

即使我知道这个文件是正确的和可执行的.有任何想法吗?谢谢!

bash executable fish

10
推荐指数
2
解决办法
5619
查看次数

促进复杂的GADT

我最近一直在玩弄-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一种.任何想法都会非常有用!

haskell gadt dependent-type data-kinds

9
推荐指数
0
解决办法
149
查看次数

从结构上反映异构推广类型回到价值观

我最近一直在玩-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)

reflection haskell typeclass dependent-type data-kinds

8
推荐指数
1
解决办法
472
查看次数

Linked Cabal沙箱 - 从`cabal repl`找不到的共享库

我有两个正在开发的软件包,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.

haskell shared-libraries cabal cabal-install

7
推荐指数
1
解决办法
252
查看次数

使用 Yew 回调作为 wasm_bindgen 闭包

这个问题是为 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)

closures callback rust wasm-bindgen yew

7
推荐指数
0
解决办法
757
查看次数

我可以拥有完全多态的功能吗?

是否有可能具有完全类型模糊的功能?该函数是否具有类型签名:

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 types

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

如何将序列句法糖([1..6])翻译成实际的列表语法(1:2:3 ... 6)?

Haskell如何翻译[]进入列表定义?他们是否重视构造者或其他什么?他们是新类型吗?有没有办法定义一个outfix语法,而不是一个中缀语法?

syntax haskell enumeration list syntactic-sugar

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

无法为简单的递归函数获取类型签名

这是我的代码:

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)

recursion haskell

5
推荐指数
2
解决办法
192
查看次数