小编Woj*_*ilo的帖子

Haskell中的封闭类型族和类型推断

在GHC-7.7(和7.8)中,介绍了封闭式家庭:

封闭类型族在一个地方定义了所有方程,不能扩展,而开放族可以在模块之间分布实例.封闭族的优点是按顺序尝试其方程,类似于术语级函数定义

我想问你,为什么下面的代码不能编译?GHC应该能够推断所有类型 - GetTheType仅针对类型定义X,如果我们注释掉标记的行,则代码编译.

这是GHC中的一个错误或封闭类型的家庭没有这样的优化吗?

码:

{-# LANGUAGE TypeFamilies #-}

data X = X 

type family GetTheType a where
    GetTheType X = X

class TC a where
    tc :: GetTheType a -> Int

instance TC X where
    tc X = 5 

main = do
    -- if we comment out the following line, the code compiles
    let x = tc X
    print "hello"
Run Code Online (Sandbox Code Playgroud)

错误是:

Couldn't match expected type ?GetTheType a0’ with actual type ?X’
The type variable …
Run Code Online (Sandbox Code Playgroud)

haskell types type-inference ghc type-families

16
推荐指数
1
解决办法
1570
查看次数

Haskell独立桌面应用程序身份验证(使用google/facebook/twitter/etc帐户)

问题

我正在Haskell中编写一个独立的桌面应用程序,我很乐意在其中获得身份验证支持.我希望用户能够通过google/facebook/etc帐户登录此应用程序.

有些研究

我找到了一些协议和相关的haskell库:

问题

是否可以在独立的Haskell应用程序中创建此类身份验证?我应该使用什么库?或者我可能应该用C++编写它并从Haskell中使用它?

主要要求是:

  1. 身份验证机制应该在所有主要平台(Linux,Windows,Darwin)上的独立应用程序中运行
  2. 认证机制应该与没有gui的应用程序一起使用.

openid authentication haskell oauth web

15
推荐指数
1
解决办法
802
查看次数

Python 3中的super()是如何实现的?

我想知道Python 3中的新超级是如何实现的.

在我做了一个小例子之后,这个问题就出现在了我脑海中,我得到了一个奇怪的错误.我正在使用Pyutilib组件架构(PCA),我已经制作了自定义元类来驱动另一个类的创建:

from pyutilib.component.core import implements, SingletonPlugin, PluginMeta, Interface

class IPass(Interface):
    pass

class __MetaPlugin(PluginMeta):
    def __new__(cls, name, baseClasses, classdict):
        print(cls, name, baseClasses, classdict)
        if baseClasses:
            baseClasses += (SingletonPlugin,)
        return PluginMeta.__new__(cls, name, baseClasses, classdict)

class Pass(metaclass=__MetaPlugin):
    implements(IPass)

    def __init__(self, inputs=[], outputs=[]):
        self.inputs = []
        self.outputs = []


class A(Pass):
    def __init__(self):
        print(self.__class__) # <class '__main__.A'>
        print(self.__class__.__class__) # <class '__main__.__MetaPlugin'>
        print(PluginMeta.__class__) # <class 'type'>
        super().__init__() # SystemError: super(): empty __class__ cell
        #Pass.__init__(self) - this works

a = A()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误: …

python metaprogramming super python-3.x python-internals

14
推荐指数
2
解决办法
2179
查看次数

Haskell可以像Clang/GCC一样优化函数调用吗?

我想问你Haskell和C++编译器是否可以用同样的方式优化函数调用.请看下面的代码.在以下示例中,Haskell明显快于C++.

我听说Haskell可以编译为LLVM,可以通过LLVM传递进行优化.另外我听说Haskell有一些重要的优化.但是以下示例应该能够以相同的性能工作.我想问一下:

  1. 为什么我在C++中的示例基准测试比Haskell中的基准测试慢?
  2. 是否有可能进一步优化代码?

(我使用的是LLVM-3.2和GHC-7.6).

C++代码:

#include <cstdio>
#include <cstdlib>

int b(const int x){
    return x+5;
}

int c(const int x){
    return b(x)+1;
}

int d(const int x){
    return b(x)-1;
}

int a(const int x){
    return c(x) + d(x);
}

int main(int argc, char* argv[]){
    printf("Starting...\n");
    long int iternum = atol(argv[1]);
    long long int out = 0;
    for(long int i=1; i<=iternum;i++){
        out += a(iternum-i);
    }
    printf("%lld\n",out);
    printf("Done.\n");
}
Run Code Online (Sandbox Code Playgroud)

用.编译 clang++ -O3 main.cpp

haskell代码:

module Main where
import qualified Data.Vector as …
Run Code Online (Sandbox Code Playgroud)

c++ optimization performance haskell llvm

14
推荐指数
3
解决办法
1086
查看次数

在QML中绘制虚线和点线贝塞尔曲线

我已经看到在QML有一个Bezier曲线的示例实现,但我正在寻找一个如何实现虚线或点状贝塞尔曲线的提示.据我所知,Bezier曲线示例的作者QSGGeometryNode用于存储内部,QSGGeometryQSGFlatColorMaterial在其上应用了材料.然后,他们只需创建点列表并在它们之间绘制段.

是否有可能写一个shader,并把它应用到QSGFlatColorMaterial(以显示线dashed,dotted等等)?

最终,是否可以存储多个QSGGeometry内部QSGGeometryNode

UPDATE

我想在"纯QtQuick"中实现它- 而不是在"旧"接口(例如QPainter etc)中 - 因为我不想使用切换上下文(openGL和CPU)的东西.我更喜欢使用自定义着色器的解决方案(如果它可行) - 因为我将有更多的可能性来实现自定义外观(虚线,溺爱,彩色,可能是动画等).

如果不可能,我会用QPainter.

c++ opengl shader qt qml

14
推荐指数
1
解决办法
7971
查看次数

Haskell中的Ambigous实例解析

介绍和示例用例

你好!我在Haskell遇到了问题.我们考虑以下代码

class PolyMonad m1 m2 m3 | m1 m2 -> m3 where
    polyBind :: m1 a -> (a -> m2 b) -> m3 b
Run Code Online (Sandbox Code Playgroud)

它只声明了poly monad绑定.一个很好的示例用例场景是:

newtype Pure a = Pure { fromPure :: a } deriving (Show)

instance PolyMonad Pure Pure Pure where
    polyBind a f = f (fromPure a)

instance PolyMonad Pure IO IO where
    polyBind a f = f (fromPure a)

instance PolyMonad IO Pure IO where
    polyBind a f = (fromPure . f) <$> a …
Run Code Online (Sandbox Code Playgroud)

haskell types type-inference typeclass type-families

14
推荐指数
1
解决办法
414
查看次数

Pixi.js和ThreeJS用于高级Web GUI

这个想法

嗨!我和一个开发团队正在为交互式图形编辑创建一个开源图形界面.

我希望这个界面能够处理大量的连接节点,允许用户移动它们,重新连接,放大/缩小等.每个节点上都可以有文本,按钮,滑块和其他控件.另外我们想要创建一个非常先进的,可插拔的图形界面 - 每个面板都是一个插件 - 你可以把它想象成基于web的eclipse.面板可以是图形编辑器,时间轴或3D视口.

这个问题

我想问问你,哪个库会给我们更多的利益- Pixi.js,ThreeJS也许另外一个?也许我们应该混合它们 - 创建界面Pixi.js和一些需要3D支持的插件ThreeJS(我个人不喜欢这个想法,因为较低的"一致性").

要求

我们希望所有内容都在WebGL中运行.原因是,我们希望尽可能顺利地运行图形编辑器,并考虑到图形编辑器需要显示与GUI的其他部分相同的控件这一事实,合理地在一种技术中执行它.

我正在寻找一个图书馆,这将为我提供创建这样一个大项目的最佳性能和灵活性,特别是考虑到:

  • 能够创建自定义HUD元素(滑块,按钮,图形等)
  • 处理大量元素的能力 - 缓存/重绘只需要的部分很重要
  • 帆布后备很重要,但并不重要

javascript canvas webgl three.js pixi.js

13
推荐指数
1
解决办法
7978
查看次数

cmake vs waf for C++项目

我发现了类似的话题:Autotools,Cmake和Scons之间有什么区别?,但我的问题有点其他,我认为答案也可能是其他问题.

我发现很多文章都说waf是unstalbe(API更改),尚未准备好生产等(但所有这些文章都是2或3年).

如果我愿意,应该使用以下哪些构建工具:

  • 创建大型C++(11)项目 - 比方说一个复杂的编译器
  • 与LLVM一起使用
  • 确保它灵活易用
  • 确保它会快速实现
  • 在所有标准平台下编译(基础平台是Linux,但我想在Windows和MacOSX下编译)

阅读了很多文章,我发现了Cmake并且发现了"最好的"工具,但我没有使用它们,很难找到任何比较,这不是很偏颇(比如scons作者的比较)和不是很老.真的

c++ build-automation build cmake waf

12
推荐指数
1
解决办法
7127
查看次数

创建绑定到Haskell中记录的方法

我正在创建一个懒惰的,功能性的DSL,它允许用户使用方法定义非可变结构(类似于OO语言的类,但它们不可变).我将这种语言的代码编译为Haskell代码.

最近我遇到了这个工作流程的问题.我不想强迫用户编写显式类型,所以我想大量使用Haskell的类型推理器.当我正在翻译一个函数时会出现问题,该函数多次调用"对象"的多态方法,每次都传递不同的参数类型,如下所示:

(伪):

class X {
   def method1(a, b) {
       (a, b) // return
   }
}
def f(x) {
   print (x.method1(1,2))              // call method1 using Ints
   print (x.method1("hello", "world")) // call method1 using Strings
}

def main() {
   x = X() // constructor
   f(x)
}
Run Code Online (Sandbox Code Playgroud)
  1. 生成我提供的OO伪代码的"等效"Haskell代码的最佳方法是什么?我想要:

    • 能够将带有方法(可以有默认参数)的非可变类转换为Haskell的代码.(保留懒惰,所以我不想使用丑陋IORefs和模仿可变数据结构)
    • 不要强制用户显式写任何类型,所以我可以使用所有可用的Haskell机制来允许自动类型推断 - 比如使用Template Haskell为给定方法自动生成类型类实例(等等).
    • 能够使用我的编译器生成这样的代码,而不需要实现我自己的类型推理器(或者如果没有其他解决方案,则使用我自己的类型推理器)
    • 生成快速二进制文件的结果代码(在编译时可以很好地优化).
  2. 如果提出下面的工作流程可能是最好的一个,我们如何解决所提出的Haskell代码,以这样的方式,既f con_Xf con_Y是否行得通呢?(见下文)

目前的工作状态

伪代码可以很容易地转换成以下Haskell代码(它是手写的,不是生成的,更易于阅读):

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}

-- …
Run Code Online (Sandbox Code Playgroud)

oop polymorphism haskell types higher-rank-types

12
推荐指数
1
解决办法
523
查看次数

在Swift/Objective-C中监听window resize事件

是否可以迭代OSX中任何应用程序的所有打开窗口并在Swift中监听它们的resize事件?我想创建自定义窗口管理器,根据用户行为移动和调整事件大小 - 因此,如果用户调整窗口大小,其他窗口将自动重新排列.

我是Haskell,而不是Swift开发人员,因此我非常重视任何代码片段/示例,展示如何实现此效果.(事实上​​我将它用作一种Haskell - > Cocoa绑定.)

编辑: 我也非常有兴趣在Objective-C中找到解决方案,但Swift对我来说更重要.

macos cocoa accessibility objective-c swift

12
推荐指数
1
解决办法
4140
查看次数