News for hackers. Stuff that matters.
Re:Clojure vs. Scala by dragonwriter on Tuesday December 24, 2013 @03:11PM (#6960950)
> I'd say the 'numberToRank' parts are probably code smells, but given that its Christmas Eve, I really can't be bothered to think of a better solution right now.

  object Cards {
    sealed trait Suit
    case object Spades extends Suit
    case object Clubs extends Suit
    case object Hearts extends Suit
    case object Diamonds extends Suit

    sealed trait Rank
    trait FaceCard extends Rank

    case object Jack  extends FaceCard
    case object Queen extends FaceCard
    case object King  extends FaceCard
    case object Ace   extends FaceCard

    case class ValueCard(n: Int) extends Rank

    case class Card(rank: Rank, suit: Suit)

    type Deck = IndexedSeq[Card]
    
    val faceCardRanks = IndexedSeq(Jack,Queen,King,Ace)
    val valueCardRanks = for (rank <- 2 to 10) yield ValueCard(rank)
    val ranks = IndexedSeq.concat(valueCardRanks,faceCardRanks)
    val suits = IndexedSeq(Spades,Clubs,Diamonds,Hearts)
    
    def apply(): Deck = for(rank <- ranks; suit <- suits) yield Card(rank, suit)
  }

There are no comments on this comment yet.