最近,我开始学习F#,我正在努力与歧视的工会合作,列出结构.我找到了一个练习,我需要做以下事情:
'定义一个NonEmptyList <'a>数据结构,它可以表示一个永远不会为空的列表'
let NonEmptyList (input : List<'a>) =
match input with
| [] -> failwith "List canot be empty"
| [x] -> x
Run Code Online (Sandbox Code Playgroud)
不确定是否使用let-keyword正确实现了这一点.即..我是否需要这种结构:
type NonEmptyList<'a> = struct
| List
Run Code Online (Sandbox Code Playgroud)
type NonEmptyList<'T> =
| Cons of 'T * List<'T>
| Single of List<'T>
Run Code Online (Sandbox Code Playgroud)
let list1 : NonEmptyList<'T> = Single[1..10]
let list2 : NonEmptyList<'T> = Cons([1..3],[1..3])
Run Code Online (Sandbox Code Playgroud)
我收到一个解析器错误:此结构导致代码不像类型注释所指示的那样通用.类型变量'T已被转换为类型'列表.