【问题标题】:Haskell's "deriving Show" in F#?Haskell 在 F# 中的“衍生秀”?
【发布时间】:2011-01-18 17:30:35
【问题描述】:

在 Haskell 中,只需将 deriving Show 添加到类型定义中,就可以轻松地将代数类型/可区分联合“显示”为字符串。

在 F# 中,我最终会写出如下内容:

type Pos = 
    | Pos of int * int
    override this.ToString() = 
        match this with
        Pos(startp, endp) -> sprintf "Pos(%d, %d)" startp endp

显然,更复杂的类型会变得更糟。

在 F# 中获得类似 deriving Show 的任何方法?

【问题讨论】:

  • Err,F# 已经自动为您执行此操作,因此您无需编写 deriving Show

标签: .net haskell f# discriminated-union object-to-string


【解决方案1】:

如果您使用%A 格式说明符(如果您指定%O,它们使用ToString),则诸如printf 之类的F# 打印函数能够合理地格式化任何数据类型。您可以使用返回格式化字符串的sprintf 来实现ToString

type Pos =  
    | Pos of int * int 
    override x.ToString() = sprintf "%A" x 

这会打印例如“Pos (1, 2)”,它适用于大多数 F# 类型(列表、联合、记录、元组)。它比仅仅添加deriving Show 有点长,但至少你不必自己实现打印。

【讨论】:

  • 如何在 F# 中实现deriving Read
猜你喜欢
  • 1970-01-01
  • 2010-09-30
  • 2012-04-07
  • 1970-01-01
  • 2012-05-22
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
相关资源
最近更新 更多