# Changelog

## Latest

### New Features

- Added binary function notation for arbitrary 2-ary functions. (#260)

```
> let mod x y := x % y in 103 `mod` 10
3
```

### Backward-incompatible Changes

- Swapped the notation for
`QuoteExpr`

and `QuoteSymbolExpr`

. (#262)

```
> `(a + b) + `(a + b) -- QuoteExpr, which prevents (a + b) from unpacking
2 * '(a + b)
> 'exp x -- QuoteSymbolExpr
exp x
```

- Changed the specification of
`generateTensor`

so that the generation function takes indices as a collection. (#267)

## 4.1.2

- Nothing changed (bumped version of
`sweet-egison`

package)

## 4.1.1

- Fix compilation issue with GHC 8.10 (#248)

## 4.1.0

### New Features

```
> let (x :: _) := [1, 2, 3] in x
1
> let (x :: _) := [] in x
Primitive data pattern match failed
stack trace: <stdin>
```

- Enabled data decomposition at lambda arguments.

```
> (\(x, _) -> x) (1, 2)
1
```

- Implemented partial application.

```
> let add x y := x + y in map (add 1) [1, 2, 3]
[2, 3, 4]
```

- Huge speedup in mathematical programs:
- Reimplemented math normalization, which was originally implemented in Egison, to the interpreter in Haskell.
- Implemented lazy evaluation on tensor elements.

- Added new syntax for symmetric / anti-symmetric tensors.

### Backward-incompatible Changes

- Changed the syntax to start definitions with
`def`

keyword.

```
def x := 1
```

`io`

was previously defined as a syntastic constructs, but it is changed into a primitive function.
Namely, users will need to wrap the arguments to `io`

in a parenthesis, or insert `$`

after `io`

.

```
-- Invalid
io isEof ()
-- OK
io (isEOF ())
io $ isEOF ()
```

### Miscellaneous

## 4.0.3

## 4.0.1

- Fixed a bug of not-patterns inside sequential patterns.
- Deprecated
`procedure`

(replace them with anonymous function)

## 4.0.0

- Enabled the Haskell-like new syntax by default.