An internal DSL is a domain-specific abstraction built within the syntax and type system of a host language. It allows leveraging existing tooling and guarantees type safety, often used in Scala via functions, type classes, macros, and extension methods.