Local type declarations

Localized type alias declarations seems like that they could be very helpful especially in testing.

Example

it "test 1" do
  type Result = {a :: Int}
  let result = {a: 1} :: Result
  let argFunc :: forall a. a -> Result
      argFunc _ = {a: 5}
  functionToTest argFunc `shouldEqual` result

it "test 2" do
  type Result = {a :: Int, b :: String}
  let result = {a: 1, b: "hi"} :: Result
  let argFunc :: forall a. a -> Result
      argFunc _ = {a: 5, b: "hi there"}
  functionToTest2 (functionToTest argFunc) `shouldEqual` result

There’s an issue and draft PR already! https://github.com/purescript/purescript/issues/3708

@garyb Thanks for the link!