Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 基于lambda/church布尔的类型同义词_Haskell_Lambda - Fatal编程技术网

Haskell 基于lambda/church布尔的类型同义词

Haskell 基于lambda/church布尔的类型同义词,haskell,lambda,Haskell,Lambda,假设true(t)和false(f)的定义如下: > let t = \x -> \_ -> x t :: t1 -> t -> t1 > let f = \_ -> \y -> y f :: t1 -> t -> t 有没有一种方法可以定义一个类型同义词来捕获两个布尔值的类型?假设基本上选择第一个或第二个参数,并且您希望在类似的情况下使用它们 if' :: Boolean -> a -> a -> a if' b

假设true(
t
)和false(
f
)的定义如下:

> let t = \x -> \_ -> x
t :: t1 -> t -> t1
> let f = \_ -> \y -> y
f :: t1 -> t -> t
有没有一种方法可以定义一个类型同义词来捕获两个布尔值的类型?

假设基本上选择第一个或第二个参数,并且您希望在类似的情况下使用它们

if' :: Boolean -> a -> a -> a
if' b tval fval = b tval fval
以致

if' t 1 0 == 1
if' f 1 0 == 0
必须将类型限制为单个类型变量
a

{-# LANGUAGE RankNTypes #-}

type Boolean = forall a. a -> a -> a

这是一个。

教堂编码的布尔类型将是所有a的
。a->a->a
。它不能专门用于
t
f
的类型,但这并不奇怪:它们的类型泄漏了它们所表示的布尔值的信息。