[Haskell-beginners] Case Expressions

Thomas Friedrich info at suud.de
Fri May 29 10:27:26 EDT 2009


Hi Nathan,

do you mean something like the following?

data Interval = Unison
              | MinorSecond
              | MajorSecond
              | MinorThird
              | MajorThird
                deriving (Show)

data BasicInterval = BasicUnison
                   | Second
                   | Third
                   | Fourth
                     deriving (Show)

inter2basic :: Interval -> BasicInterval
inter2basic x = case x of
                  Unison -> BasicUnison
                  MinorSecond -> Second
                  MajorSecond -> Second
                  MinorThird -> Third
                  MajorThird -> Third


Happy Hacking,
Thomas



Nathan Holden wrote:
> I've been playing with my musical interval problem from before, and I 
> got a little further, but I came up with a problem.
>
> I have two types-- Interval and BasicInterval.
>
> Interval has 12 constructors, Unison, MinorSecond, MajorSecond, 
> MinorThird, et cetera.
> BasicInterval has 8 constructors, BasicUnison, Second, Third, Fourth, 
> and so on.
>
> I want to be able to convert between them somewhat;
>
> I have function interToBasic, which at the moment looks like:
>
> interToBasic :: Interval -> BasicInterval
> interToBasic a = if (b == 1 || b == 2) then Second
>                           else if (b == 3 || b == 4) then Third
> ..
> where b = fromEnum a
>
> What I wanted to do, and figure is probably doable, but I can't seem 
> to find it, is to say something like
>
> case (fromEnum a) of
>    1 || 2 -> Second
>    3 || 4 -> Third
> ..
>
> Is this doable? If so, what's the syntax?
> ------------------------------------------------------------------------
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>   



More information about the Beginners mailing list