-`stable` - stable release of the apps, can be used for updates to the previous stable release (GHC 9.6.2).
-`stable-android` - used to build stable Android core library with Nix (GHC 8.10.7).
-`stable-ios` - used to build stable iOS core library with Nix (GHC 8.10.7) – this branch should be the same as `stable-android` except Nix configuration files.
-`master` - branch for beta version releases (GHC 9.6.2).
1. The main difference is related to `DuplicateRecordFields` extension.
It is no longer possible in GHC 9.6.2 to specify type when using selectors, instead OverloadedRecordDot extension and syntax are used that need to be removed in GHC 8.10.7:
```haskell
{-# LANGUAGE DuplicateRecordFields #-}
-- use this in GHC 9.6.2 when needed
{-# LANGUAGE OverloadedRecordDot #-}
-- GHC 9.6.2 syntax
let x = record.field
-- GHC 8.10.7 syntax removed in GHC 9.6.2
let x = field (record :: Record)
```
It is still possible to specify type when using record update syntax, use this pragma to suppress compiler warning:
```haskell
-- use this in GHC 9.6.2 when needed
{-# OPTIONS_GHC -fno-warn-ambiguous-fields #-}
let r' = (record :: Record) {field = value}
```
2. Most monad functions now have to be imported from `Control.Monad`, and not from specific monad modules (e.g. `Control.Monad.Except`).
```haskell
-- use this in GHC 9.6.2 when needed
import Control.Monad
```
[This PR](https://github.com/simplex-chat/simplex-chat/pull/2975/files) has all the differences.