在Haskell中,是否可以编写一个带有签名的函数,该签名可以接受两种不同(尽管相似)的数据类型,并根据传入的类型进行不同的操作?
一个例子可能会让我的问题更加清晰.如果我有一个函数命名myFunction
,和两个类型的命名MyTypeA
和MyTypeB
,我可以定义myFunction
,使其只能接受类型的数据MyTypeA
或MyTypeB
作为其第一个参数?
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
我正在尝试使用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)