Added typed

This commit is contained in:
Aearnus 2018-05-31 00:27:57 -07:00
parent b8cd627ab0
commit 04b384a6c0
1 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,47 @@
{-# LANGUAGE TypeFamilies, TypeOperators, GADTs, DataKinds, KindSignatures, PolyKinds #-}
module DSL.SixtyFiveOhTwo.Types where
import Data.Word
import Data.Int
import Data.Bits
-- Remember, it's little endian
data AddressingKind =
ImpliedKind |
AccumulatorKind |
ImmediateKind |
RelativeKind |
ZeroPageRelativeKind |
AbsoluteKind |
AbsoluteXKind |
AbsoluteYKind |
ZeroPageKind |
ZeroPageXKind |
ZeroPageYKind |
ZeroPageIndirectKind |
IndirectKind |
IndirectXKind |
IndirectYKind
data AddressingMode (k :: AddressingKind) where
Implied :: AddressingMode 'ImpliedKind
Accumulator :: AddressingMode 'AccumulatorKind
Immediate :: Word8 -> AddressingMode 'ImmediateKind
Relative :: Int8 -> AddressingMode 'RelativeKind -- Signed
ZeroPageRelative :: Int8 -> AddressingMode 'ZeroPageKind -- Signed
Absolute :: Word16 -> AddressingMode 'AbsoluteKind
AbsoluteX :: Word16 -> AddressingMode 'AbsoluteXKind
AbsoluteY :: Word16 -> AddressingMode 'AbsoluteYKind
ZeroPage :: Word8 -> AddressingMode 'ZeroPageKind
ZeroPageX :: Word8 -> AddressingMode 'ZeroPageXKind
ZeroPageY :: Word8 -> AddressingMode 'ZeroPageYKind
ZeroPageIndirect :: Word8 -> AddressingMode 'ZeroPageIndirectKind
Indirect :: Word16 -> AddressingMode 'IndirectKind
IndirectX :: Word8 -> AddressingMode 'IndirectXKind
IndirectY :: Word8 -> AddressingMode 'IndirectYKind
type family IsElem (e :: k) (es :: [k]) where
IsElem e '[] = 'False
IsElem e (e ': es) = 'True
IsElem e (x ': es) = IsElem e es