Incompatibilidade de tipo F # Seq.head e Seq.tail com tipos personalizados

type Suit = Spades | Clubs | Hearts | Diamonds
type Rank = Ace | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten | Jack | Queen | King
type Card = {suit: Suit; rank: Rank}

type Hand = Card seq

let AllSuits = [ Spades; Clubs; Hearts; Diamonds ]
let AllRanks = [ Ace; Two; Three; Four; Five; Six; Seven; Eight; Nine; Ten; Jack; Queen; King ]

let cardValue (card:Card) = 
    match card.rank with
    | Ace -> 1
    | Two -> 2
    | Three -> 3
    | Four -> 4
    | Five -> 5
    | Six -> 6
    | Seven -> 7
    | Eight -> 8
    | Nine -> 9
    | Ten | Jack | Queen | King -> 10

let rec handValue (hand:Hand) =
    if Seq.length hand = 1
    then cardValue Seq.head
    else cardValue Seq.head + handValue Seq.tail

Eu tenho tipos personalizadosRankeSuit, combinado em um tipo personalizadoCarde uma coleção de tipos personalizadosHand que é uma sequência de cartões.

Quando eu usoSeq.head no recursivohandValue função recebo o erro:

Era esperado que essa expressão tivesse tipo'Card' mas aqui tem tipo''a -> 'b'

Fiquei com a impressão de que, como ohand é uma sequência deCard , queSeq.head retornaria o primeiro elemento na sequência, como tipoCard.

Também quando eu usoSeq.tail Eu recebo o erro:

O tipo''a -> seq<'b>' não é compatível com o tipo'Hand'

Fiquei com a impressão de queSeq.tail retornaria uma sequência deCard, que embora não declarado explicitamente comoHand deve ser idêntico em funcionalidade.

Não tenho certeza de como abordar o primeiro erro.e, para o segundo erro, qual seria o mais apropriado; lançando oHand digite para umSequence digite e usandoSeq.tail, lançando o retornadoSequence digite comoHand tipo.

Ou talvez haja algo menor na sintaxe que estou ignorando completamente. Qualquer ajuda seria muito apreciada.

questionAnswers(2)

yourAnswerToTheQuestion