Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6899207
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T07:23:34+00:00 2026-05-27T07:23:34+00:00

Let’s assume we have the following data type: data Cmd = Cmd0 Opcode |

  • 0

Let’s assume we have the following data type:

data Cmd = Cmd0 Opcode | Cmd1 Opcode Arg | Cmd2 OPcode Arg Arg
data Opcode = NOP | INC | ADD | MUL deriving (Enum)
data Arg = W32 Int | W16 Int | W8 Int

The idea is to have an Opcode type that produces sequential opcode numbers. Is there any way to specify a constraints for Cmd values, say: Cmd0 is only has NOP opcode, Cmd1 is only INC,
Cmd2 is only ADD or MUL values. I tried to use GATDs, but they operates by types, not values.

Or vise versa is there any way to generate a sequentual opcodes for every value of Cmd without
declaring fromEnum method for every value manually or without using TH ?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T07:23:34+00:00Added an answer on May 27, 2026 at 7:23 am

    You could use separate OpCode types:

    data Opcode0 = NOP
    data Opcode1 = INC
    data Opcode2 = ADD | MUL
    
    data Cmd = Cmd0 Opcode0 | Cmd1 Opcode1 Arg | Cmd2 Opcode2 Arg Arg
    

    Now sometimes you might want to treat all the Opcodes as a single type, say to put them in a list. For this purpose you could use a type class for Opcode types and use existential types:

    class OpcodeCl a where --empty classes seem to be allowed (in GHC at least)
    instance OpcodeCl Opcode0 where
    instance OpcodeCl Opcode1 where
    instance OpcodeCl Opcode2 where
    
    data Opcode = forall a . (OpcodeCl a) => Op { unOp :: a }
    

    I suspect you wouldn’t be able to do anything with Opcode here, since the class OpcodeCl has no methods. You could add useful methods to OpcodeCl, which convert to or from Ints, for example.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Let's say I'm building a data access layer for an application. Typically I have
Let's say you have a class called Customer, which contains the following fields: UserName
Let's say I have the following text: (example) <table> <tr> <td> <span>col1</span> </td> <td>col2</td>
Let's say I have the following object: var VariableName = { firstProperty: 1, secondProperty:
Let say I have the following desire, to simplify the IConvertible's to allow me
Let's imagine I have a Java class of the type: public class MyClass {
Let's say I have the following function in C#: void ProcessResults() { using (FormProgress
Let's say I have this MySQL table: OK.. see the type field? Type 0
Let's say I have the following models class Photo(models.Model): tags = models.ManyToManyField(Tag) class Tag(models.Model):
Let's say for example i have URL containing the following percent encoded character :

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.