# `Core` package

This package provides common algorithms and data structures.

``````{
"type": "library"
}
``````

## Install

``````{
"dependencies": {
"Core": "pen:///core"
}
}
``````

## `Core'Bit` module

This module provides bitwise operations.

Most functions defined in this module take arguments of 64-bit integers. They can be converted from and into integers represented in IEEE-754 of a `number` type.

### Types

No types are defined.

### Functions

#### `And`

Calculate bitwise "and" given two 64-bit integers.

``````\(x number, y number) number
``````

#### `Or`

Calculate bitwise "or" given two 64-bit integers.

``````\(x number, y number) number
``````

#### `Xor`

Calculate bitwise exclusive-"or" given two 64-bit integers.

``````\(x number, y number) number
``````

#### `Not`

Calculate bitwise "not" given two 64-bit integers.

``````\(x number) number
``````

#### `LeftShift`

Calculate unsigned left shift given a 64-bit integer.

``````\(x number, n number) number
``````

#### `RightShift`

Calculate unsigned right shift given a 64-bit integer.

``````\(x number, n number) number
``````

#### `ToInteger64`

Convert an integer in IEEE-754 to a 64-bit integer.

``````\(x number) number
``````

#### `FromInteger64`

Convert a 64-bit integer to an integer in IEEE-754.

``````\(x number) number
``````

## `Core'Boolean` module

This module provides common boolean operations.

### Types

No types are defined.

### Functions

#### `Any`

Return true if any of given booleans are true or false otherwise.

``````\(bs [boolean]) boolean
``````

#### `All`

Return true if all of given booleans are true or false otherwise.

``````\(bs [boolean]) boolean
``````

## `Core'Character` module

### Types

No types are defined.

### Functions

#### `FromCodePoint`

``````\(n number) string
``````

#### `ToCodePoint`

``````\(s string) number
``````

## `Core'List` module

This module provides common list operations.

### Types

No types are defined.

### Functions

#### `First`

Get the first element in a list. If a list is empty, it returns a fallback value.

``````\(xs [any], fallback any) any
``````

#### `Last`

Get the last element in a list. If a list is empty, it returns a fallback value.

``````\(xs [any], fallback any) any
``````

#### `ToNumbers`

Convert a list of an `any` type to one of a `number` type skipping non-`number` types.

``````\(xs [any]) [number]
``````

#### `ToStrings`

Convert a list of an `any` type to one of a `string` type skipping non-`string` types.

``````\(xs [any]) [string]
``````

#### `ToBooleans`

Convert a list of an `any` type to one of a `boolean` type skipping non-`boolean` types.

``````\(xs [any]) [boolean]
``````

## `Core'Number` module

This module provides common number operations.

### Types

No types are defined.

### Functions

#### `Absolute`

Calculate an absolute value.

``````\(x number) number
``````

#### `Ceil`

Calculate a ceil value.

``````\(x number) number
``````

#### `Epsilon`

Machine epsilon

``````\() number
``````

#### `Exponential`

Calculate an exponential of a number.

``````\(x number) number
``````

#### `Floor`

Calculate a floor value.

``````\(x number) number
``````

#### `Fraction`

Calculate a fraction value of a number.

``````\(x number) number
``````

#### `Infinity`

Infinity

``````\() number
``````

#### `IsNan`

Check if a number is NaN.

``````\(x number) boolean
``````

#### `Maximum`

Calculate a maximum.

``````\(x number, y number) number
``````

#### `Minimum`

Calculate a minimum.

``````\(x number, y number) number
``````

#### `Nan`

NaN

``````\() number
``````

#### `Parse`

Parse a number.

``````\(s string) number | error
``````

#### `Power`

Calculate a power.

``````\(base number, exponent number) number
``````

#### `Range`

Create a list of numbers from a minimum to a maximum.

``````\(minimum number, maximum number) [number]
``````

#### `Remainder`

Calculate a remainder.

``````\(dividend number, divisor number) number
``````

#### `Round`

Round a number.

``````\(x number) number
``````

#### `Sequence`

Create a list of numbers from 1 to a maximum value.

``````\(maximum number) [number]
``````

#### `SquareRoot`

Calculate a square root.

``````\(x number) number
``````

#### `String`

Convert a number into its string representation.

``````\(x number) string
``````

#### `Sum`

Sum up numbers.

``````\(xs [number]) number
``````

#### `Truncate`

Return an integer value of a number.

``````\(x number) number
``````

## `Core'String` module

This module provides common string operations.

### Types

No types are defined.

### Functions

#### `Concatenate`

Concatenate strings.

``````\(strings [string]) string
``````

#### `Join`

Join strings with a separator.

``````\(strings [string], separator string) string
``````

#### `HasPrefix`

Check if a string has a prefix.

``````\(s string, prefix string) boolean
``````

## `Core'String'Byte` module

This module provides operations for strings as byte arrays.

### Types

No types are defined.

### Functions

#### `Length`

Return a length of a string.

``````\(s string) number
``````

#### `Slice`

Slice a string.

``````\(s string, start number, end number) string
``````

## `Core'String'Byte'View` module

This module provides views of strings as byte arrays. By using those views, you can apply operations to strings without copying them.

### Types

#### `View`

A view of a string

``````type View {
# ...
}
``````

### Functions

#### `New`

Create a view of a string.

``````\(s string) View
``````

#### `Viewee`

Get an original string.

``````\(v View) string
``````

#### `Start`

Get a start index of a view.

``````\(v View) number
``````

#### `End`

Get an end index of a view.

``````\(v View) number
``````

#### `HasPrefix`

Check if a string has a prefix.

``````\(v View, s string) boolean
``````

#### `Length`

Get a length of a view.

``````\(v View) number
``````

#### `Seek`

Move a start index forward.

``````\(v View, n number) View
``````

#### `Slice`

Slice a view.

``````\(v View, start number, end number) View
``````

#### `ToString`

Convert a view into a string.

``````\(v View) string
``````

## `Core'String'Utf8` module

This module provides operations for strings encoded in UTF-8.

### Types

No types are defined.

### Functions

#### `Contains`

Check if a string contains a pattern.

``````\(s string, pat string) boolean
``````

#### `Find`

Find an index for a pattern in a string.

``````\(s string, pat string) number | none
``````

#### `HasPrefix`

Checks if a string has a prefix..

``````\(s string, pat string) boolean
``````

#### `HasSuffix`

Checks if a string has a suffix..

``````\(s string, pat string) boolean
``````

#### `Length`

Return a length of a string.

``````\(s string) number
``````

#### `Replace`

Replace a pattern in a string.

``````\(s string, pattern string, replacement string) string
``````

#### `Slice`

Slice a string.

``````\(s string, start number, end number) string
``````

#### `Split`

Split a string by a pattern.

``````\(s string, pat string) [string]
``````

#### `ToLowercase`

Convert a string into lowercase.

``````\(s string) string
``````

#### `ToUppercase`

Convert a string into uppercase.

``````\(s string) string
``````

#### `Trim`

``````\(s string) string
``````

#### `TrimEnd`

Trim trailing spaces.

``````\(s string) string
``````

#### `TrimEndMatches`

Trim trailing patterns.

``````\(s string, pat string) string
``````

#### `TrimMatches`

``````\(s string, pat string) string
``````

#### `TrimStart`

``````\(s string) string
#### `TrimStartMatches`
``````\(s string, pat string) string