問題是您的StringList
類型正在定義一個新類型,該類型是string list
的封裝類型。可以在string list
上運行的函數在你的包裝器上不起作用,因爲他們對它沒有任何瞭解。
您可以定義StringList
作爲一個類型別名 - 因此而不是定義一個新類型,它只是同一事物的一個方便的名字:
type StringList = string list
let sl : StringList = [ "Hello, "; "World" ]
let length = List.length sl
另一種選擇是在調用之前提取string list
值List.length
:
type StringList = StringList of string list
let stringListlength (StringList(slData)) =
List.length slData
let sl = StringList [ "Hello, "; "World" ]
stringListlength sl
在第一種方法,你只是定義一個名字,但是編譯器不會做任何檢查,因此,如果您想使用類型標註的名稱(例如,它是唯一有用的)t o讓他們可讀。
在第二種方法中,您確實定義了一種新類型,因此您確保使用StringList
的每個人都將使用您定義或使用的功能。
很難說這裏有什麼好的方法,因爲StringList
不是很好的例子 - 它不能通過string list
傳達任何附加信息。
_Context:剛開始學習F#._ –