【问题标题】:How to use specify data types in curried function?如何在柯里化函数中使用指定数据类型?
【发布时间】:2016-02-04 07:20:13
【问题描述】:

我正在尝试在 SMLNJ 中创建一个柯里化函数,将 (string * bool) 对附加到列表中。我可以这样做:

fun push L a b = (a,b) :: L;
-val push = fn : ('a * 'b) list -> 'a -> 'b -> ('a * 'b) list

这行得通,但我想要一个只接受 (string * bool) 列表、字符串和 bool 的函数。我不知道怎么写函数签名。

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    在函数定义中添加显式类型注解就足够了:

    fun push L a b = (a:string,b:bool) :: L;
    

    推断的类型是

    val push = fn : (string * bool) list -> string -> bool -> (string * bool) list
    

    话虽如此——我不喜欢不必要地减少多态函数的多态性。刚性类型检查不需要在实用函数级别。

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      相关资源
      最近更新 更多