簡體   English   中英

Haskell到F# - 在f#中聲明一個遞歸類型

[英]Haskell to F# - declare a recursive types in f#

我試圖通過移植一些Haskell代碼來教我自己的F#。

特別是我試圖移植這里顯示的倒計時問題

這里列出 Haskell代碼

我試圖在F#中創建以下Haskell類型:

data Op      = Add | Sub | Mul | Div

data Expr    = Val Int | App Op Expr Expr

在F#中我認為Op類型定義如下:

type Op = | Add | Sub | Mul | Div

我遇到了Expr類型的問題。

如何創建遞歸類型? 這個SO問題看起來,人們無法在F#中創建Expr類型。

還有什么是'App'類型的F#等價物,它將Op類型應用於Expr類型。

如果無法直接移植此代碼,有人可能會建議替代數據結構。

定義像這樣的遞歸類型不是問題; 你不能做的是創建更高級的類型,它們在類型構造函數上進行參數化(這個例子不需要它)。 對於任何聯合類型定義,您需要使用關鍵字“of”將構造函數名稱與構造函數參數分開,並且參數本身應采用元組類型的形式(即它們應以星號分隔):

type Op = Add | Sub | Mul | Div
type Expr = Val of int | App of Op * Expr * Expr

@kvb發布了正確答案。

也可以看看

F#轉發類型聲明

對於如何做的事情,當你確實需要相互遞歸類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM