从类型来编写满足类型的函数

hen*_*nry 1 haskell types functional-programming ml

这个问题来自考试.我不知道该怎么做.:-(

问题:给出一个类型为haskell或ml函数的示例

(a - > b) - >(c - > a) - > c - > b

怎么做?

Dan*_*her 7

什么有意义的功能可以有类型mystery :: ( a -> b ) -> ( c -> a ) -> c -> b

让我们看看,有什么可以

mystery f g x
Run Code Online (Sandbox Code Playgroud)

是?

它有三件事可以使用,

  • 一个x类型的值c,
  • 一个g类型c -> a和功能的功能
  • 一种f类型的功能a -> b.

它应该产生一个类型的值b.

唯一与之有关的参数b是函数f,因此结果必须是f ???.

f这里的论点是什么?它必须有类型a,并且从给定的参数(忽略底部undefined,error "foo")生成该类型的值的唯一方法是应用于g某些东西,所以它必须是

mystery f g x = f (g ??)
Run Code Online (Sandbox Code Playgroud)

但什么可以g适用于?那必须是类型的值c.除了底部之外c,可以从参数构造的唯一类型值是x,所以

mystery f g x = f (g x)
Run Code Online (Sandbox Code Playgroud)

必须是函数组合(或未定义).

  • @henry尝试Daniel自己建议的方法.你在哪里卡住?(如果你没有被卡住......那么,你有答案!=) (3认同)