DEV Community

Cover image for NeoHaskell v0.5.0 - HTTP, TOML, Nested Actions Now Executed and Major Refactoring
Nick Tchayka for NeoHaskell

Posted on

NeoHaskell v0.5.0 - HTTP, TOML, Nested Actions Now Executed and Major Refactoring

We are excited to announce the release of NeoHaskell v0.5.0, featuring significant improvements, bug fixes, and new functionalities. This version addresses major issues from previous releases and introduces enhancements that improve the reliability and performance of NeoHaskell applications.

πŸš€ New Features and Improvements

πŸ› οΈ Fixed Execution of Nested Actions

  • Issue Addressed: Nested actions were not being executed, leading to incomplete workflows and unexpected behavior.
  • Solution: Refactored the action processing system to correctly handle and execute nested actions.
  • Impact: Ensures that all intended actions are performed, providing more reliable and predictable application behavior.

🌐 Introduced HTTP Client Support

  • Capability: Added HTTP client functionalities using the http-conduit library.
  • Modules Added:
    • core/http/Http.hs
    • core/http/Http/Client.hs
  • Features:
    • Perform HTTP GET requests with JSON parsing.
    • Seamless integration of HTTP requests into NeoHaskell applications.
  • Note: Currently supports only GET requests.

πŸ“„ Transitioned from YAML to TOML for Configuration

  • Change: Replaced YAML configuration support with TOML.
  • Reason: TOML offers a simpler syntax and is better suited for configuration needs.
  • Action Required: Users must migrate their YAML configuration files to TOML format.
  • Modules Affected:
    • Removed: core/yaml/Yaml.hs
    • Added: core/toml/Toml.hs (using the toml-parser library)

βš™οΈ Refactored Core Modules

  • Standardization and Cleanup:
    • Removed custom implementations and redundant GHC extensions.
    • Cleaned up imports and exports in core modules for clarity and maintainability.
  • IO Module Enhancements (core/core/IO.hs):
    • Added map and try functions for improved error handling and functional composition.
  • Result Module Enhancements (core/core/Result.hs):
    • Introduced fromEither function for better interoperability with Haskell's Either type.

πŸš€ Improved Service Layer

  • Action Processing (core/service/Action.hs):
    • Rewrote action processing logic to correctly handle nested actions.
    • Adjusted the Action type and related functions to support new data structures.
  • Event Handling (core/service/Service/EventWorker.hs):
    • Enhanced event worker logic to accurately process events derived from actions.
    • Ensured proper propagation of events throughout the system.
  • Runtime State Management (core/service/Service/RuntimeState.hs):
    • Refactored runtime state handling to use standard data types.
    • Simplified registration of default action handlers and improved extensibility.

🧹 Removed large-anon Library and Anonymous Records

  • Change: Eliminated the large-anon library and the use of anonymous records.
  • Reason: To simplify the codebase, reduce complexity, and improve performance.
  • Changes Made:
    • Replaced anonymous records with standard Haskell data types using data declarations.
    • Removed GHC extensions: OverloadedRecordUpdate, RebindableSyntax, and unnecessary OverloadedRecordDot.
    • Updated all modules to use conventional records, enhancing compatibility and maintainability.
  • Note: This feature might be reintroduced in the future.

πŸ“ Miscellaneous Changes

  • Updated Cabal Files:
    • cli/nhcli.cabal and core/nhcore.cabal updated.
    • Removed unused dependencies and GHC extensions.
    • Added new dependencies: http-conduit, toml-parser.
  • Console and Logging Enhancements:
    • Improved logging messages for better debugging and visibility.
    • Standardized log formats and included more contextual information.
  • Code Cleanup:
    • Removed deprecated code and modules (e.g., core/yaml/Yaml.hs, cli/src/Neo/Transpile.hs).
    • Ensured all modules are updated to use new data type definitions.
  • Removed Modules:
    • Deleted content of core/core/Record.hs as it's no longer necessary.
    • Removed dependencies on external libraries in core/service/Html.hs, provided placeholders instead.

⚠️ Breaking Changes

  • Data Types:
    • Replaced anonymous records with standard data types.
    • Affects the structure of State, Event, Action, and other core components.
  • GHC Extensions:
    • Removed extensions that were previously required for anonymous records.
  • Configuration Files:
    • Users need to migrate their configuration files from YAML to TOML format.
  • Module Imports:
    • Updated module imports and exports.
    • User code may require updates to accommodate these changes.

πŸ”§ Action Required for Users

  • Update Configuration:
    • Migrate your YAML configuration files to TOML format to align with the new configuration system.
  • Code Adjustments:
    • Review your code for dependencies on anonymous records and update to use standard data types.
    • Check for any GHC extensions that may no longer be necessary or supported.
    • Update module imports to match the new module structure.

πŸ“£ Conclusion

NeoHaskell v0.5.0 brings important fixes and enhancements that improve the overall stability and functionality of the platform. While some changes are breaking, they pave the way for a more robust and maintainable codebase. We recommend all users upgrade to this version and adjust their code accordingly to benefit from the improvements.

Thank you for your continued support and contributions to NeoHaskell!

Top comments (0)