clash-prelude-1.8.4: Clash: a functional hardware description language - Prelude library

Safe Haskell | None
Language | Haskell2010

Clash.Class.HasDomain

Synopsis

- type WithSpecificDomain (dom :: Domain) r = (HasSpecificDomain dom r, dom ~ GetDomain dom r)
- type WithSingleDomain (dom :: Domain) r = (HasSingleDomain r, dom ~ GetDomain r)
- type family HasDomain (dom :: Domain) n :: HasDomainWrapperResult
- type family TryDomain orig n :: TryDomainResult
- data TryDomainResult
  - = NotFound
  - | Ambiguous Domain Domain
  - | Found Domain
- type DomEq (n :: Domain) (m :: Domain) = IfStuck (DomEqWorker n m) 'NotFound (Pure (DomEqWorker n m))

# Documentation

type WithSpecificDomain (dom :: Domain) r = (HasSpecificDomain dom r, dom ~ GetDomain dom r) Source #

Type that forces dom to be present in r at least once. Will resolve to a type error if it doesn't. It will always fail if given dom is completely polymorphic and can't be tied to r in any way.

type WithSingleDomain (dom :: Domain) r = (HasSingleDomain r, dom ~ GetDomain r) Source #

Type that forces dom to be the same in all subtypes of r that might contain a domain. If given a polymorphic domain not tied to r, GHC will be allowed to infer that that domain is equal to the one in r on the condition that r contains just a single domain.

type family HasDomain (dom :: Domain) n :: HasDomainWrapperResult Source #

Type family that searches a type and checks whether a specific domain is present. Will result in either "domain not found, and no others either", "domain not found, but found another", or "found domain".

#### Instances

Instances details

type HasDomain dom1 (Clock dom2) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom1 (Clock dom2) = DomEq dom1 dom2
type HasDomain dom1 (Enable dom2) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom1 (Enable dom2) = DomEq dom1 dom2
type HasDomain dom1 (Reset dom2) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom1 (Reset dom2) = DomEq dom1 dom2
type HasDomain dom (Vec n a) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (Vec n a) = HasDomain dom a
type HasDomain dom (a, b) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a, b) = Merge dom a b
type HasDomain dom (a -> b) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a -> b) = Merge dom a b
type HasDomain dom1 (Signal dom2 a) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom1 (Signal dom2 a) = DomEq dom1 dom2
type HasDomain dom1 (Proxy dom2) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom1 (Proxy dom2) = DomEq dom1 dom2
type HasDomain dom (a0, a1, a2) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a0, a1, a2) = Merge dom a0 (a1, a2)
type HasDomain dom1 (BiSignalOut ds dom2 n) Source # |
Instance details Defined in Clash.Signal.BiSignal type HasDomain dom1 (BiSignalOut ds dom2 n) = DomEq dom1 dom2
type HasDomain dom1 (DSignal dom2 delay a) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom1 (DSignal dom2 delay a) = DomEq dom1 dom2
type HasDomain dom (a0, a1, a2, a3) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a0, a1, a2, a3) = Merge dom a0 (a1, a2, a3)
type HasDomain dom (a0, a1, a2, a3, a4) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a0, a1, a2, a3, a4) = Merge dom a0 (a1, a2, a3, a4)
type HasDomain dom (a0, a1, a2, a3, a4, a5) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a0, a1, a2, a3, a4, a5) = Merge dom a0 (a1, a2, a3, a4, a5)
type HasDomain dom (a0, a1, a2, a3, a4, a5, a6) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a0, a1, a2, a3, a4, a5, a6) = Merge dom a0 (a1, a2, a3, a4, a5, a6)
type HasDomain dom (a0, a1, a2, a3, a4, a5, a6, a7) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a0, a1, a2, a3, a4, a5, a6, a7) = Merge dom a0 (a1, a2, a3, a4, a5, a6, a7)
type HasDomain dom (a0, a1, a2, a3, a4, a5, a6, a7, a8) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a0, a1, a2, a3, a4, a5, a6, a7, a8) = Merge dom a0 (a1, a2, a3, a4, a5, a6, a7, a8)
type HasDomain dom (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) = Merge dom a0 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
type HasDomain dom (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = Merge dom a0 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
type HasDomain dom (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSpecificDomain type HasDomain dom (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = Merge dom a0 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)

type family TryDomain orig n :: TryDomainResult Source #

#### Instances

Instances details

type TryDomain t Bit Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t Bit = 'NotFound
type TryDomain t Integer Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t Integer = 'NotFound
type TryDomain t Natural Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t Natural = 'NotFound
type TryDomain t () Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t () = 'NotFound
type TryDomain t Bool Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t Bool = 'NotFound
type TryDomain t Double Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t Double = 'NotFound
type TryDomain t Float Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t Float = 'NotFound
type TryDomain t Int Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t Int = 'NotFound
type TryDomain t (Clock dom) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Clock dom) = 'Found dom
type TryDomain t (Enable dom) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Enable dom) = 'Found dom
type TryDomain t (Reset dom) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Reset dom) = 'Found dom
type TryDomain t (BitVector n) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (BitVector n) = 'NotFound
type TryDomain t (Index n) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Index n) = 'NotFound
type TryDomain t (Signed n) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Signed n) = 'NotFound
type TryDomain t (Unsigned n) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Unsigned n) = 'NotFound
type TryDomain t (Maybe a) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Maybe a) = TryDomain t a
type TryDomain t (Signal dom a) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Signal dom a) = 'Found dom
type TryDomain t (RTree d a) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (RTree d a) = TryDomain t a
type TryDomain t (Vec n a) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Vec n a) = TryDomain t a
type TryDomain t (Either a b) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Either a b) = Merge t a b
type TryDomain t (Proxy dom) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Proxy dom) = 'Found dom
type TryDomain t (a, b) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a, b) = Merge t a b
type TryDomain t (a -> b) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a -> b) = Merge t a b
type TryDomain t (BiSignalOut ds dom n) Source # |
Instance details Defined in Clash.Signal.BiSignal type TryDomain t (BiSignalOut ds dom n) = 'Found dom
type TryDomain t (DSignal dom delay a) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (DSignal dom delay a) = 'Found dom
type TryDomain t (Fixed a n m) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (Fixed a n m) = TryDomain t (a (n + m))
type TryDomain t (a0, a1, a2) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a0, a1, a2) = Merge t a0 (a1, a2)
type TryDomain t (a0, a1, a2, a3) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a0, a1, a2, a3) = Merge t a0 (a1, a2, a3)
type TryDomain t (a0, a1, a2, a3, a4) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a0, a1, a2, a3, a4) = Merge t a0 (a1, a2, a3, a4)
type TryDomain t (a0, a1, a2, a3, a4, a5) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a0, a1, a2, a3, a4, a5) = Merge t a0 (a1, a2, a3, a4, a5)
type TryDomain t (a0, a1, a2, a3, a4, a5, a6) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a0, a1, a2, a3, a4, a5, a6) = Merge t a0 (a1, a2, a3, a4, a5, a6)
type TryDomain t (a0, a1, a2, a3, a4, a5, a6, a7) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a0, a1, a2, a3, a4, a5, a6, a7) = Merge t a0 (a1, a2, a3, a4, a5, a6, a7)
type TryDomain t (a0, a1, a2, a3, a4, a5, a6, a7, a8) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a0, a1, a2, a3, a4, a5, a6, a7, a8) = Merge t a0 (a1, a2, a3, a4, a5, a6, a7, a8)
type TryDomain t (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) = Merge t a0 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
type TryDomain t (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = Merge t a0 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
type TryDomain t (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source # |
Instance details Defined in Clash.Class.HasDomain.HasSingleDomain type TryDomain t (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = Merge t a0 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)

data TryDomainResult Source #

Constructors

NotFound |
Ambiguous Domain Domain |
Found Domain |

type DomEq (n :: Domain) (m :: Domain) = IfStuck (DomEqWorker n m) 'NotFound (Pure (DomEqWorker n m)) Source #

Check domain for equality. Return `'Found` if so, return `'NotFound` if not. The reason d'etre for this type family is that _open_ type families don't allow overlapping types. We therefore defer equality checking to a closed type family.