MorphirIRGen

org.finos.morphir.ir.generator.MorphirIRGen
See theMorphirIRGen companion object

Attributes

Companion:
object
Graph
Supertypes
Known subtypes
object MorphirIRGen.type

Members list

Concise view

Value members

Inherited methods

final def accessControlled[R, A](accessGen: Gen[R, Access], valueGen: Gen[R, A]): Gen[R, AccessControlled[A]]

Attributes

Inherited from:
AccessControlledGen
final def accessControlledFromAttributes[R, A](implicit valueGen: Gen[R, A]): Gen[R, AccessControlled[A]]

Attributes

Inherited from:
AccessControlledGen
final def apply[R, TA, VA](valueAttributesGen: Gen[R, VA], functionGen: Gen[R, Value[TA, VA]], argumentGen: Gen[R, Value[TA, VA]]): Gen[R, Apply[TA, VA]]

Attributes

Inherited from:
ValueGen
final def applyFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, Apply[TA, VA]]

Attributes

Inherited from:
ValueGen
final def asPattern[R, A](attributesGen: Gen[R, A], patternGen: Gen[R, Pattern[A]], nameGen: Gen[R, Name]): Gen[R, AsPattern[A]]

Attributes

Inherited from:
PatternGen
final def asPatternFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, AsPattern[A]]

Attributes

Inherited from:
PatternGen
final def asciiCharLiteral: Gen[Any, CharLiteral]

Attributes

Inherited from:
LiteralGen
final def boolLiteral: Gen[Any, BoolLiteral]

Attributes

Inherited from:
LiteralGen
final def charLiteral(min: Char, max: Char): Gen[Any, CharLiteral]

Attributes

Inherited from:
LiteralGen
final def charLiteral: Gen[Any, CharLiteral]

Attributes

Inherited from:
LiteralGen
final def constructor[R, VA](valueAttributesGen: Gen[R, VA], fullyQualifiedNameGen: Gen[R, FQName]): Gen[R, Constructor[VA]]

Attributes

Inherited from:
ValueGen
final def constructorFromAttributes[R, VA](implicit valueAttributes: Gen[R, VA]): Gen[R, Constructor[VA]]

Attributes

Inherited from:
ValueGen
final def constructorPattern[R, A](attributesGen: Gen[R, A], constructorNameGen: Gen[R, FQName], argumentPatternsGen: Gen[R, Chunk[Pattern[A]]]): Gen[R, ConstructorPattern[A]]

Attributes

Inherited from:
PatternGen
final def constructorPatternFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, ConstructorPattern[A]]

Attributes

Inherited from:
PatternGen
final def constructorsFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, Constructors[A]]

Attributes

Inherited from:
ConstructorsGen
final def constructorsFromMap[R, A](toMapGen: Gen[R, Map[Name, Chunk[(Name, Type[A])]]]): Gen[R, Constructors[A]]

Attributes

Inherited from:
ConstructorsGen
final def customTypeDefinition[R, A](typeParamsGen: Gen[R, Chunk[Name]], ctorsGen: Gen[R, AccessControlled[Constructors[A]]]): Gen[R, CustomType[A]]

Attributes

Inherited from:
TypeDefinitionGen
final def customTypeDefinitionFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, CustomType[A]]

Attributes

Inherited from:
TypeDefinitionGen
final def customTypeSpecification[R, A](typeParamsGen: Gen[R, Chunk[Name]], ctorsGen: Gen[R, Constructors[A]]): Gen[R, CustomTypeSpecification[A]]

Attributes

Inherited from:
TypeSpecificationGen
final def customTypeSpecificationFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, CustomTypeSpecification[A]]

Attributes

Inherited from:
TypeSpecificationGen
final def decimalLiteral(min: BigDecimal, max: BigDecimal): Gen[Any, DecimalLiteral]

Attributes

Inherited from:
LiteralGen
final def destructure[R, TA, VA](valueAttributesGen: Gen[R, VA], patternGen: Gen[R, Pattern[VA]], valueToDestructGen: Gen[R, Value[TA, VA]], inValueGen: Gen[R, Value[TA, VA]]): Gen[R, Destructure[TA, VA]]

Attributes

Inherited from:
ValueGen
final def destructureFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, Destructure[TA, VA]]

Attributes

Inherited from:
ValueGen
final def distribution: Gen[Any, Distribution]

Attributes

Inherited from:
DistributionGen
final def documented[R, A](stringGen: Gen[R, String], dataGen: Gen[R, A]): Gen[R, Documented[A]]

Attributes

Inherited from:
DocumentedGen
final def documentedFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, Documented[A]]

Attributes

Inherited from:
DocumentedGen
final def emptyListPattern[R, A](implicit attributesGen: Gen[R, A]): Gen[R, EmptyListPattern[A]]

Attributes

Inherited from:
PatternGen
final def extensibleRecord[R, A](attributesGen: Gen[R, A], nameGen: Gen[R, Name], fieldsGen: Gen[R, Chunk[Field[Type[A]]]]): Gen[R, ExtensibleRecord[A]]

Attributes

Inherited from:
TypeGen
final def extensibleRecordFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, ExtensibleRecord[A]]

Attributes

Inherited from:
TypeGen
final def field[R, TA, VA](valueAttributesGen: Gen[R, VA], subjectValueGen: Gen[R, Value[TA, VA]], fieldNameGen: Gen[R, Name]): Gen[R, Field[TA, VA]]

Attributes

Inherited from:
ValueGen
final def field[R, A](nameGen: Gen[R, Name], dataGen: Gen[R, A]): Gen[R, Field[A]]

Attributes

Inherited from:
FieldGen
final def fieldFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, Field[TA, VA]]

Attributes

Inherited from:
ValueGen
final def fieldFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, Field[A]]

Attributes

Inherited from:
FieldGen
final def fieldFunction[R, VA](valueAttributesGen: Gen[R, VA], nameGen: Gen[R, Name]): Gen[R, FieldFunction[VA]]

Attributes

Inherited from:
ValueGen
final def fieldFunctionFromAttributes[R, VA](implicit valueAttributes: Gen[R, VA]): Gen[R, FieldFunction[VA]]

Attributes

Inherited from:
ValueGen
final def floatLiteral(min: BigDecimal, max: BigDecimal): Gen[Any, FloatLiteral]

Attributes

Inherited from:
LiteralGen
final def floatLiteral: Gen[Any, FloatLiteral]

Attributes

Inherited from:
LiteralGen
final def fqName[R](packagePathGen: Gen[R, Path], modulePathGen: Gen[R, Path], localNameGen: Gen[R, Name]): Gen[R, FQName]

Attributes

Inherited from:
FQNameGen
final def function[R, A](attributesGen: Gen[R, A], typeGen: Gen[R, Type[A]]): Gen[R, Function[A]]

Attributes

Inherited from:
TypeGen
final def functionFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, Function[A]]

Attributes

Inherited from:
TypeGen
final def headTailPattern[R, A](attributesGen: Gen[R, A], headPatternGen: Gen[R, Pattern[A]], tailPatternGen: Gen[R, Pattern[A]]): Gen[R, HeadTailPattern[A]]

Attributes

Inherited from:
PatternGen
final def headTailPatternFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, HeadTailPattern[A]]

Attributes

Inherited from:
PatternGen
final def ifThenElse[R, TA, VA](valueAttributesGen: Gen[R, VA], conditionGen: Gen[R, Value[TA, VA]], thenBranchGen: Gen[R, Value[TA, VA]], elseBranchGen: Gen[R, Value[TA, VA]]): Gen[R, IfThenElse[TA, VA]]

Attributes

Inherited from:
ValueGen
final def ifThenElseFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, IfThenElse[TA, VA]]

Attributes

Inherited from:
ValueGen
final def lambda[R, TA, VA](valueAttributesGen: Gen[R, VA], argumentPatternGen: Gen[R, Pattern[VA]], bodyGen: Gen[R, Value[TA, VA]]): Gen[R, Lambda[TA, VA]]

Attributes

Inherited from:
ValueGen
final def lambdaFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, Lambda[TA, VA]]

Attributes

Inherited from:
ValueGen
final def letDefinition[R, TA, VA](valueAttributesGen: Gen[R, VA], valueNameGen: Gen[R, Name], valueDefinitionGen: Gen[R, ValueDefinition[TA, VA]], inValueGen: Gen[R, Value[TA, VA]]): Gen[R, LetDefinition[TA, VA]]

Attributes

Inherited from:
ValueGen
final def letDefinitionFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, LetDefinition[TA, VA]]

Attributes

Inherited from:
ValueGen
final def letRecursion[R, TA, VA](valueAttributesGen: Gen[R, VA], valueDefinitionsGen: Gen[R, Map[Name, ValueDefinition[TA, VA]]], inValueGen: Gen[R, Value[TA, VA]]): Gen[R, LetRecursion[TA, VA]]

Attributes

Inherited from:
ValueGen
final def letRecursionFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, LetRecursion[TA, VA]]

Attributes

Inherited from:
ValueGen
final def libraryDistribution(packageNameGen: Gen[Any, PackageName], dependenciesGen: Gen[Any, Map[PackageName, USpecification]], packageDefGen: Gen[Any, Typed]): Gen[Any, Library]

Attributes

Inherited from:
DistributionGen
final def list[R, TA, VA](valueAttributesGen: Gen[R, VA], elementsGen: Gen[R, Chunk[Value[TA, VA]]]): Gen[R, List[TA, VA]]

Attributes

Inherited from:
ValueGen
final def listFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, List[TA, VA]]

Attributes

Inherited from:
ValueGen
final def literal[R, VA](valueAttributesGen: Gen[R, VA], literalGen: Gen[R, Literal]): Gen[R, Literal[VA]]

Attributes

Inherited from:
ValueGen
final def literal: Gen[Any, Literal]

Attributes

Inherited from:
LiteralGen
final def literalFromAttributes[R, VA](implicit valueAttributes: Gen[R, VA]): Gen[R, Literal[VA]]

Attributes

Inherited from:
ValueGen
final def literalPattern[R, A](attributesGen: Gen[R, A], literalGen: Gen[R, Literal]): Gen[R, LiteralPattern[A]]

Attributes

Inherited from:
PatternGen
final def literalPatternFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, LiteralPattern[A]]

Attributes

Inherited from:
PatternGen
final def moduleDefinition[R, TA, VA](typesGen: Gen[R, Map[Name, AccessControlled[Documented[Definition[TA]]]]], valuesGen: Gen[R, Map[Name, AccessControlled[Documented[ValueDefinition[TA, VA]]]]]): Gen[R, Definition[TA, VA]]

Attributes

Inherited from:
ModuleDefinitionGen
final def moduleDefinitionFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, Definition[TA, VA]]

Attributes

Inherited from:
ModuleDefinitionGen
final def moduleSpecification[R, TA](typesGen: Gen[R, Map[Name, Documented[Specification[TA]]]], valuesGen: Gen[R, Map[Name, Documented[ValueSpecification[TA]]]]): Gen[R, Specification[TA]]

Attributes

Inherited from:
ModuleSpecificationGen
final def moduleSpecificationFromAttributes[R, TA](implicit typeAttributes: Gen[R, TA]): Gen[R, Specification[TA]]

Attributes

Inherited from:
ModuleSpecificationGen
final def morphirIRFile(versionGen: Gen[Any, MorphirIRVersion], distributionGen: Gen[Any, Distribution]): Gen[Any, MorphirIRFile]

Attributes

Inherited from:
MorphirIRFileGen
final def opaqueTypeSpecification[R, A](typeParamsGen: Gen[R, Chunk[Name]]): Gen[R, OpaqueTypeSpecification]

Attributes

Inherited from:
TypeSpecificationGen
final def opaqueTypeSpecificationFromAttributes[R, A]: Gen[R, OpaqueTypeSpecification]

Attributes

Inherited from:
TypeSpecificationGen
final def packageDefinition[R, TA, VA](modulesGen: Gen[R, Map[ModuleName, AccessControlled[Definition[TA, VA]]]]): Gen[R, Definition[TA, VA]]

Attributes

Inherited from:
PackageDefinitionGen
final def packageDefinitionFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, Definition[TA, VA]]

Attributes

Inherited from:
PackageDefinitionGen
final def packageSpecification[R, TA](modulesGen: Gen[R, Map[ModuleName, Specification[TA]]]): Gen[R, Specification[TA]]

Attributes

Inherited from:
PackageSpecificationGen
final def packageSpecificationFromAttributes[R, TA](implicit typeAttributes: Gen[R, TA]): Gen[R, Specification[TA]]

Attributes

Inherited from:
PackageSpecificationGen
final def path: Gen[Any, Path]

Attributes

Inherited from:
PathGen
final def pattern[R, A](implicit attributesGen: Gen[R, A]): Gen[R, Pattern[A]]

Attributes

Inherited from:
PatternGen
final def patternMatch[R, TA, VA](valueAttributesGen: Gen[R, VA], branchOutOnGen: Gen[R, Value[TA, VA]], casesGen: Gen[R, Chunk[(Pattern[VA], Value[TA, VA])]]): Gen[R, PatternMatch[TA, VA]]

Attributes

Inherited from:
ValueGen
final def patternMatchFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, PatternMatch[TA, VA]]

Attributes

Inherited from:
ValueGen
final def qName[R](modulePathGen: Gen[R, Path], localNameGen: Gen[R, Name]): Gen[R, QName]

Attributes

Inherited from:
QNameGen
final def qualifiedModuleName[R](namespace: Gen[R, Path], localName: Gen[R, Name]): Gen[R, QualifiedModuleName]

Attributes

Inherited from:
QualifiedModuleNameGen
final def recordType[R, A](attributesGen: Gen[R, A], fieldsGen: Gen[R, Chunk[Field[Type[A]]]]): Gen[R, Record[A]]

Attributes

Inherited from:
TypeGen
final def recordTypeFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, Record[A]]

Attributes

Inherited from:
TypeGen
final def recordValue[R, TA, VA](valueAttributesGen: Gen[R, VA], fieldsGen: Gen[R, Chunk[(Name, Value[TA, VA])]]): Gen[R, Record[TA, VA]]

Attributes

Inherited from:
ValueGen
final def recordValueFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, Record[TA, VA]]

Attributes

Inherited from:
ValueGen
final def referenceType[R, A](attributesGen: Gen[R, A], typeNameGen: Gen[R, FQName], typeParamsGen: Gen[R, Chunk[Type[A]]]): Gen[R, Reference[A]]

Attributes

Inherited from:
TypeGen
final def referenceTypeFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, Reference[A]]

Attributes

Inherited from:
TypeGen
final def referenceValue[R, VA](valueAttributesGen: Gen[R, VA], fullyQualifiedNameGen: Gen[R, FQName]): Gen[R, Reference[VA]]

Attributes

Inherited from:
ValueGen
final def referenceValueFromAttributes[R, VA](implicit valueAttributes: Gen[R, VA]): Gen[R, Reference[VA]]

Attributes

Inherited from:
ValueGen
final def stringLiteral: Gen[Any, StringLiteral]

Attributes

Inherited from:
LiteralGen
final def tuplePattern[R, A](attributesGen: Gen[R, A], elementPatternsGen: Gen[R, Chunk[Pattern[A]]]): Gen[R, TuplePattern[A]]

Attributes

Inherited from:
PatternGen
final def tuplePatternFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, TuplePattern[A]]

Attributes

Inherited from:
PatternGen
final def tupleType[R, A](attributesGen: Gen[R, A], elementsGen: Gen[R, Chunk[Type[A]]]): Gen[R, Tuple[A]]

Attributes

Inherited from:
TypeGen
final def tupleTypeFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, Tuple[A]]

Attributes

Inherited from:
TypeGen
final def tupleValue[R, TA, VA](valueAttributesGen: Gen[R, VA], elementsGen: Gen[R, Chunk[Value[TA, VA]]]): Gen[R, Tuple[TA, VA]]

Attributes

Inherited from:
ValueGen
final def tupleValueFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, Tuple[TA, VA]]

Attributes

Inherited from:
ValueGen
final def typeAliasDefinition[R, A](typeParamsGen: Gen[R, Chunk[Name]], typeExpGen: Gen[R, Type[A]]): Gen[R, TypeAlias[A]]

Attributes

Inherited from:
TypeDefinitionGen
final def typeAliasDefinitionFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, TypeAlias[A]]

Attributes

Inherited from:
TypeDefinitionGen
final def typeAliasSpecification[R, A](typeParamsGen: Gen[R, Chunk[Name]], exprGen: Gen[R, Type[A]]): Gen[R, TypeAliasSpecification[A]]

Attributes

Inherited from:
TypeSpecificationGen
final def typeAliasSpecificationFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, TypeAliasSpecification[A]]

Attributes

Inherited from:
TypeSpecificationGen
final def typeDefinition[R, A](implicit attributesGen: Gen[R, A]): Gen[R, Definition[A]]

Attributes

Inherited from:
TypeDefinitionGen
final def typeGen[R, A](implicit attributesGen: Gen[R, A]): Gen[R, Type[A]]

Attributes

Inherited from:
TypeGen
final def typeSpecification[R, A](implicit attributesGen: Gen[R, A]): Gen[R, Specification[A]]

Attributes

Inherited from:
TypeSpecificationGen
final def unitPattern[R, A](implicit attributesGen: Gen[R, A]): Gen[R, UnitPattern[A]]

Attributes

Inherited from:
PatternGen
final def unitType[R, A](implicit attributesGen: Gen[R, A]): Gen[R, Unit[A]]

Attributes

Inherited from:
TypeGen
final def unitValue[R, VA](implicit valueAttributesGen: Gen[R, VA]): Gen[R, Unit[VA]]

Attributes

Inherited from:
ValueGen
final def updateRecord[R, TA, VA](valueAttributesGen: Gen[R, VA], valueToUpdateGen: Gen[R, Value[TA, VA]], fieldsToUpdateGen: Gen[R, Map[Name, Value[TA, VA]]]): Gen[R, UpdateRecord[TA, VA]]

Attributes

Inherited from:
ValueGen
final def updateRecordFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, UpdateRecord[TA, VA]]

Attributes

Inherited from:
ValueGen
final def value[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, Value[TA, VA]]

Attributes

Inherited from:
ValueGen
final def valueDefinition[R, TA, VA](inputTypesGen: Gen[R, Chunk[(Name, VA, Type[TA])]], outputTypeGen: Gen[R, Type[TA]], bodyGen: Gen[R, Value[TA, VA]]): Gen[R, ValueDefinition[TA, VA]]

Attributes

Inherited from:
ValueDefinitionGen
final def valueDefinitionFromAttributes[R, TA, VA](implicit typeAttributes: Gen[R, TA], valueAttributes: Gen[R, VA]): Gen[R, ValueDefinition[TA, VA]]

Attributes

Inherited from:
ValueDefinitionGen
final def valueSpecification[R, TA](inputsGen: Gen[R, Chunk[(Name, Type[TA])]], outputGen: Gen[R, Type[TA]]): Gen[R, ValueSpecification[TA]]

Attributes

Inherited from:
ValueSpecificationGen
final def valueSpecificationFromAttributes[R, TA](implicit typeAttributesGen: Gen[R, TA]): Gen[R, ValueSpecification[TA]]

Attributes

Inherited from:
ValueSpecificationGen
final def variableType[R, A](attributesGen: Gen[R, A], nameGen: Gen[R, Name]): Gen[R, Variable[A]]

Attributes

Inherited from:
TypeGen
final def variableTypeFromAttributes[R, A](implicit attributes: Gen[R, A]): Gen[R, Variable[A]]

Attributes

Inherited from:
TypeGen
final def variableValue[R, VA](valueAttributesGen: Gen[R, VA], nameGen: Gen[R, Name]): Gen[R, Variable[VA]]

Attributes

Inherited from:
ValueGen
final def variableValueFromAttributes[R, VA](implicit valueAttributes: Gen[R, VA]): Gen[R, Variable[VA]]

Attributes

Inherited from:
ValueGen
final def wholeNumberLiteral: Gen[Any, WholeNumberLiteral]

Attributes

Inherited from:
LiteralGen
final def wholeNumberLiteral(min: Long, max: Long): Gen[Any, WholeNumberLiteral]

Attributes

Inherited from:
LiteralGen
final def wholeNumberLiteral(min: BigInt, max: BigInt): Gen[Any, WholeNumberLiteral]

Attributes

Inherited from:
LiteralGen
final def wildcardPattern[R, A](implicit attributesGen: Gen[R, A]): Gen[R, WildcardPattern[A]]

Attributes

Inherited from:
PatternGen

Inherited fields

final val access: Gen[Any, Access]

Attributes

Inherited from:
AccessControlledGen
final val fqName: Gen[Any, FQName]

Attributes

Inherited from:
FQNameGen
val greekLetterNames: Gen[Any, String]

Attributes

Inherited from:
WordGen
final val libraryDistribution: Gen[Any, Library]

Attributes

Inherited from:
DistributionGen
final val moduleName: Gen[Any, ModuleName]

Attributes

Inherited from:
ModuleNameGen
val monthNames: Gen[Any, String]

Attributes

Inherited from:
WordGen
final val morphirIRFile: Gen[Any, MorphirIRFile]

Attributes

Inherited from:
MorphirIRFileGen
final val morphirIRVersion: Gen[Any, MorphirIRVersion]

Attributes

Inherited from:
MorphirIRFileGen
final val name: Gen[Any, Name]

Attributes

Inherited from:
NameGen
final val packageName: Gen[Any, PackageName]

Attributes

Inherited from:
PackageNameGen
final val qName: Gen[Any, QName]

Attributes

Inherited from:
QNameGen
final val qualifiedModuleName: Gen[Any, QualifiedModuleName]

Attributes

Inherited from:
QualifiedModuleNameGen
val words: Gen[Any, String]

Attributes

Inherited from:
WordGen