在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中编写一个独立的桌面应用程序,我很乐意在其中获得身份验证支持.我希望用户能够通过google/facebook/etc帐户登录此应用程序.
有些研究
我找到了一些协议和相关的haskell库:
Yesod(web框架)密切相关,第二个支持OAuth版本1.0(目前有版本2.0可用)问题
是否可以在独立的Haskell应用程序中创建此类身份验证?我应该使用什么库?或者我可能应该用C++编写它并从Haskell中使用它?
主要要求是:
我想知道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)
我收到以下错误: …
我想问你Haskell和C++编译器是否可以用同样的方式优化函数调用.请看下面的代码.在以下示例中,Haskell明显快于C++.
我听说Haskell可以编译为LLVM,可以通过LLVM传递进行优化.另外我听说Haskell有一些重要的优化.但是以下示例应该能够以相同的性能工作.我想问一下:
(我使用的是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) 我已经看到在QML中有一个Bezier曲线的示例实现,但我正在寻找一个如何实现虚线或点状贝塞尔曲线的提示.据我所知,Bezier曲线示例的作者QSGGeometryNode用于存储内部,QSGGeometry并QSGFlatColorMaterial在其上应用了材料.然后,他们只需创建点列表并在它们之间绘制段.
是否有可能写一个shader,并把它应用到QSGFlatColorMaterial(以显示线dashed,dotted等等)?
最终,是否可以存储多个QSGGeometry内部QSGGeometryNode?
UPDATE
我想在"纯QtQuick"中实现它- 而不是在"旧"接口(例如QPainter etc)中 - 因为我不想使用切换上下文(openGL和CPU)的东西.我更喜欢使用自定义着色器的解决方案(如果它可行) - 因为我将有更多的可能性来实现自定义外观(虚线,溺爱,彩色,可能是动画等).
如果不可能,我会用QPainter.
介绍和示例用例
你好!我在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) 这个想法
嗨!我和一个开发团队正在为交互式图形编辑创建一个开源图形界面.
我希望这个界面能够处理大量的连接节点,允许用户移动它们,重新连接,放大/缩小等.每个节点上都可以有文本,按钮,滑块和其他控件.另外我们想要创建一个非常先进的,可插拔的图形界面 - 每个面板都是一个插件 - 你可以把它想象成基于web的eclipse.面板可以是图形编辑器,时间轴或3D视口.
这个问题
我想问问你,哪个库会给我们更多的利益- Pixi.js,ThreeJS也许另外一个?也许我们应该混合它们 - 创建界面Pixi.js和一些需要3D支持的插件ThreeJS(我个人不喜欢这个想法,因为较低的"一致性").
要求
我们希望所有内容都在WebGL中运行.原因是,我们希望尽可能顺利地运行图形编辑器,并考虑到图形编辑器需要显示与GUI的其他部分相同的控件这一事实,合理地在一种技术中执行它.
我正在寻找一个图书馆,这将为我提供创建这样一个大项目的最佳性能和灵活性,特别是考虑到:
我发现了类似的话题:Autotools,Cmake和Scons之间有什么区别?,但我的问题有点其他,我认为答案也可能是其他问题.
我发现很多文章都说waf是unstalbe(API更改),尚未准备好生产等(但所有这些文章都是2或3年).
如果我愿意,应该使用以下哪些构建工具:
阅读了很多文章,我发现了Cmake并且发现了"最好的"工具,但我没有使用它们,很难找到任何比较,这不是很偏颇(比如scons作者的比较)和不是很老.真的
我正在创建一个懒惰的,功能性的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)
生成我提供的OO伪代码的"等效"Haskell代码的最佳方法是什么?我想要:
IORefs和模仿可变数据结构)如果提出下面的工作流程可能是最好的一个,我们如何解决所提出的Haskell代码,以这样的方式,既f con_X和f con_Y是否行得通呢?(见下文)
目前的工作状态
伪代码可以很容易地转换成以下Haskell代码(它是手写的,不是生成的,更易于阅读):
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
-- …Run Code Online (Sandbox Code Playgroud) 是否可以迭代OSX中任何应用程序的所有打开窗口并在Swift中监听它们的resize事件?我想创建自定义窗口管理器,根据用户行为移动和调整事件大小 - 因此,如果用户调整窗口大小,其他窗口将自动重新排列.
我是Haskell,而不是Swift开发人员,因此我非常重视任何代码片段/示例,展示如何实现此效果.(事实上我将它用作一种Haskell - > Cocoa绑定.)
编辑: 我也非常有兴趣在Objective-C中找到解决方案,但Swift对我来说更重要.
haskell ×5
c++ ×3
types ×3
build ×1
canvas ×1
cmake ×1
cocoa ×1
ghc ×1
javascript ×1
llvm ×1
macos ×1
oauth ×1
objective-c ×1
oop ×1
opengl ×1
openid ×1
optimization ×1
performance ×1
pixi.js ×1
polymorphism ×1
python ×1
python-3.x ×1
qml ×1
qt ×1
shader ×1
super ×1
swift ×1
three.js ×1
typeclass ×1
waf ×1
web ×1
webgl ×1