小编ult*_*fez的帖子

使用代数数据类型或多态性,是否有一个Haskell相当于OOP的抽象类?

在Haskell中,是否可以编写一个带有签名的函数,该签名可以接受两种不同(尽管相似)的数据类型,并根据传入的类型进行不同的操作?

一个例子可能会让我的问题更加清晰.如果我有一个函数命名myFunction,和两个类型的命名MyTypeAMyTypeB,我可以定义myFunction,使其只能接受类型的数据MyTypeAMyTypeB作为其第一个参数?

type MyTypeA = (Int, Int, Char, Char)
type MyTypeB = ([Int], [Char])

myFunction :: MyTypeA_or_MyTypeB -> Char
myFunction constrainedToTypeA = something
myFunction constrainedToTypeB = somethingElse
Run Code Online (Sandbox Code Playgroud)

在OOP语言中,您可以编写我正在尝试实现的内容,如下所示:

public abstract class ConstrainedType {
}

public class MyTypeA extends ConstrainedType {
    ...various members...
}

public class MyTypeB extends ConstrainedType {
    ...various members...
}

...

public Char myFunction(ConstrainedType a) {
    if (a TypeOf MyTypeA) {
        return doStuffA();
    }
    else if …
Run Code Online (Sandbox Code Playgroud)

polymorphism haskell functional-programming typeclass algebraic-data-types

32
推荐指数
1
解决办法
3268
查看次数

在Ubuntu Server 12.04上安装Ruby gem"ffi"的问题

我正在尝试使用bundle安装我的新项目所需的宝石,但是我在安装'ffi'宝石的1.1.5版时遇到了麻烦.

我正在使用运行在64位Ubuntu Server 12.04的虚拟安装上的Ruby 1.9.3.运行该bundle命令时,我收到以下错误消息:

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /home/alex/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for ffi.h... no
checking for ffi.h in /usr/local/include,/usr/include/ffi... no
checking for rb_thread_blocking_region()... yes
checking for ruby_native_thread_p()... yes
checking for rb_thread_call_with_gvl()... yes
creating extconf.h
creating Makefile

make
Configuring libffi
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux"SampleRails
/gems/ffi-1.1.5/ext/ffi_c/libffi-x86_64-linux'ems/ruby-1.9.3-p194@SampleRails
make "AR_FLAGS=" "CC_FOR_BUILD=" "CFLAGS=-Wall -fexceptions" "CXXFLAGS=" "CFLAGS_FOR_BUILD=" "CFLAGS_FOR_TARGET=" "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m 644" "INSTALL_PROGRAM=/usr/bin/install -c" "INSTALL_SCRIPT=/usr/bin/install -c" "JC1FLAGS=" "LDFLAGS=" "LIBCFLAGS=" "LIBCFLAGS_FOR_TARGET=" "MAKE=make" "MAKEINFO=/b/gems/ffi-1.1.5/ext/ffi_c/libffi/missing --run makeinfo " "PICFLAG=" "PICFLAG_FOR_TARGET=" "RUNTESTFLAGS=" …
Run Code Online (Sandbox Code Playgroud)

rubygems ruby-on-rails ruby-on-rails-3

5
推荐指数
1
解决办法
5436
查看次数