小编Ste*_*son的帖子

使用Scala,OCaml和Haskell中的类型捕获图表规则

我试图描述一个复杂的图形,其中包含许多不同类型的节点和边缘,这些节点和边缘只能根据一组规则相互连接.我希望在编译时使用该语言的类型系统检查这些规则.在我的实际应用程序中有许多不同的节点和边缘类型.

我在Scala中轻松创建了一个简单示例:

sealed trait Node {
  val name: String
}
case class NodeType1(override val name: String) extends Node
case class NodeType2(override val name: String) extends Node
case class NodeType3(override val name: String) extends Node

sealed trait Edge
case class EdgeType1(source: NodeType1, target: NodeType2) extends Edge
case class EdgeType2(source: NodeType2, target: NodeType1) extends Edge

object Edge {
  def edgeSource(edge: Edge): Node = edge match {
    case EdgeType1(src, _) => src
    case EdgeType2(src, _) => src
  }
}

object Main {
  def …
Run Code Online (Sandbox Code Playgroud)

ocaml haskell types scala

11
推荐指数
2
解决办法
327
查看次数

标签 统计

haskell ×1

ocaml ×1

scala ×1

types ×1