Types (sml/nj)正确的类型?

Types (sml/nj)正确的类型?,types,functional-programming,sml,Types,Functional Programming,Sml,对于我的作业,我必须对类型执行两个功能: wt: trie -> (char list list -> ’a)-> ’a aw: trie list -> (char list list -> ’a)-> ’a 但我有一个问题,我想知道这是否是同一件事: wt: 'a trie -> ('a list list -> ’a list list)-> ’a list list aw: 'a trie list -> ('a l

对于我的作业,我必须对类型执行两个功能:

 wt: trie -> (char list list -> ’a)-> ’a
 aw: trie list -> (char list list -> ’a)-> ’a
但我有一个问题,我想知道这是否是同一件事:

 wt: 'a trie -> ('a list list -> ’a list list)-> ’a list list 
 aw: 'a trie list -> ('a list list -> ’a list list)-> ’a list list
这是我的职责:

datatype ’a trie = Node of ’a * (’a trie) list | Empty

fun words_in_trie Empty cont = cont [[]]
    | words_in_trie (Node (c, lis)) cont = all_words lis (fn j => map (fn y => [c]@y) j)

不,那些不一样。对于它们中的每一个,请查看第二个参数,即函数。你的任务是:

char list list -> 'a
你的说法是:

'a list list -> ’a list list
好的,让我们假设在函数中,
'a
char
。这意味着我们可以把它改写成

char list list -> char list list
这和作业上说的不一样。当然,作业中的
'a
理论上可以是
字符列表
,但当它被指定为
'a
时,这可能意味着您的老师希望它是通用的