I have a type that represents a direction, it has an axis and an orientation:

```hs
data Dir = DirX | DirY | DirZ | DirW deriving (Show, Eq)
data Sign = Pos | Neg deriving (Show, Eq)
newtype Direction = Direction (Dir, Sign) deriving (Show, Eq)

```

And that looks kinda overcomplicated. I don't need `Sign` and `Dir` to be distinct types, I just want to pattern match things to their constructors. So is there any nicer way to define such kind of types?

So what I want to do is some kind of

```hs
data Direction = Direction (DirX | DirY | DirZ | DirW) (Pos | Neg) deriving (Show, Eq)

```

Because I do things like `\(Direction _ s) -> if s == Pos then ... else ...`, but I never use `Dir` or `Sign` outside of the `Direction`

I suppose I'm not the first one to ask this, but I really can't figure out how to google this question.