---
Function {
    argument: None,
    arguments: FunctionArguments {
        arguments: [
            FunctionArgument {
                identifier: "topkg",
                default: None,
            },
            FunctionArgument {
                identifier: "ocamlbuild",
                default: None,
            },
            FunctionArgument {
                identifier: "ocaml",
                default: None,
            },
            FunctionArgument {
                identifier: "findlib",
                default: None,
            },
            FunctionArgument {
                identifier: "fetchurl",
                default: None,
            },
            FunctionArgument {
                identifier: "lib",
                default: None,
            },
            FunctionArgument {
                identifier: "stdenv",
                default: None,
            },
        ],
        ellipsis: false,
    },
    definition: LetIn {
        bindings: [
            KeyValue(
                AttributePath {
                    attributes: [
                        Raw {
                            content: "minimumSupportedOcamlVersion",
                            position: (11, 3),
                        },
                    ],
                },
                String {
                    parts: [
                        Raw {
                            content: "4.02.0",
                            position: (11, 35),
                        },
                    ],
                },
            ),
        ],
        target: Assert {
            expression: FunctionApplication {
                function: PropertyAccess {
                    expression: Variable {
                        identifier: "lib",
                        position: (13, 8),
                    },
                    attribute_path: AttributePath {
                        attributes: [
                            Raw {
                                content: "versionOlder",
                                position: (13, 12),
                            },
                        ],
                    },
                    default: None,
                },
                arguments: [
                    Variable {
                        identifier: "minimumSupportedOcamlVersion",
                        position: (13, 25),
                    },
                    PropertyAccess {
                        expression: Variable {
                            identifier: "ocaml",
                            position: (13, 54),
                        },
                        attribute_path: AttributePath {
                            attributes: [
                                Raw {
                                    content: "version",
                                    position: (13, 60),
                                },
                            ],
                        },
                        default: None,
                    },
                ],
            },
            target: FunctionApplication {
                function: PropertyAccess {
                    expression: Variable {
                        identifier: "stdenv",
                        position: (15, 1),
                    },
                    attribute_path: AttributePath {
                        attributes: [
                            Raw {
                                content: "mkDerivation",
                                position: (15, 8),
                            },
                        ],
                    },
                    default: None,
                },
                arguments: [
                    Map {
                        bindings: [
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "pname",
                                            position: (16, 3),
                                        },
                                    ],
                                },
                                String {
                                    parts: [
                                        Raw {
                                            content: "hmap",
                                            position: (16, 12),
                                        },
                                    ],
                                },
                            ),
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "version",
                                            position: (17, 3),
                                        },
                                    ],
                                },
                                String {
                                    parts: [
                                        Raw {
                                            content: "0.8.1",
                                            position: (17, 14),
                                        },
                                    ],
                                },
                            ),
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "name",
                                            position: (18, 3),
                                        },
                                    ],
                                },
                                String {
                                    parts: [
                                        Raw {
                                            content: "ocaml",
                                            position: (18, 11),
                                        },
                                        Expression {
                                            expression: PropertyAccess {
                                                expression: Variable {
                                                    identifier: "ocaml",
                                                    position: (18, 18),
                                                },
                                                attribute_path: AttributePath {
                                                    attributes: [
                                                        Raw {
                                                            content: "version",
                                                            position: (18, 24),
                                                        },
                                                    ],
                                                },
                                                default: None,
                                            },
                                        },
                                        Raw {
                                            content: "-",
                                            position: (18, 32),
                                        },
                                        Expression {
                                            expression: Variable {
                                                identifier: "pname",
                                                position: (18, 35),
                                            },
                                        },
                                        Raw {
                                            content: "-",
                                            position: (18, 41),
                                        },
                                        Expression {
                                            expression: Variable {
                                                identifier: "version",
                                                position: (18, 44),
                                            },
                                        },
                                    ],
                                },
                            ),
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "src",
                                            position: (20, 3),
                                        },
                                    ],
                                },
                                FunctionApplication {
                                    function: Variable {
                                        identifier: "fetchurl",
                                        position: (20, 9),
                                    },
                                    arguments: [
                                        Map {
                                            bindings: [
                                                KeyValue(
                                                    AttributePath {
                                                        attributes: [
                                                            Raw {
                                                                content: "url",
                                                                position: (21, 5),
                                                            },
                                                        ],
                                                    },
                                                    String {
                                                        parts: [
                                                            Raw {
                                                                content: "http://erratique.ch/software/hmap/releases/",
                                                                position: (21, 12),
                                                            },
                                                            Expression {
                                                                expression: Variable {
                                                                    identifier: "pname",
                                                                    position: (21, 57),
                                                                },
                                                            },
                                                            Raw {
                                                                content: "-",
                                                                position: (21, 63),
                                                            },
                                                            Expression {
                                                                expression: Variable {
                                                                    identifier: "version",
                                                                    position: (21, 66),
                                                                },
                                                            },
                                                            Raw {
                                                                content: ".tbz",
                                                                position: (21, 74),
                                                            },
                                                        ],
                                                    },
                                                ),
                                                KeyValue(
                                                    AttributePath {
                                                        attributes: [
                                                            Raw {
                                                                content: "sha256",
                                                                position: (22, 5),
                                                            },
                                                        ],
                                                    },
                                                    String {
                                                        parts: [
                                                            Raw {
                                                                content: "10xyjy4ab87z7jnghy0wnla9wrmazgyhdwhr4hdmxxdn28dxn03a",
                                                                position: (22, 15),
                                                            },
                                                        ],
                                                    },
                                                ),
                                            ],
                                            recursive: false,
                                        },
                                    ],
                                },
                            ),
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "nativeBuildInputs",
                                            position: (25, 3),
                                        },
                                    ],
                                },
                                List {
                                    elements: [
                                        Variable {
                                            identifier: "ocaml",
                                            position: (25, 25),
                                        },
                                        Variable {
                                            identifier: "ocamlbuild",
                                            position: (25, 31),
                                        },
                                        Variable {
                                            identifier: "findlib",
                                            position: (25, 42),
                                        },
                                        Variable {
                                            identifier: "topkg",
                                            position: (25, 50),
                                        },
                                    ],
                                },
                            ),
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "buildInputs",
                                            position: (26, 3),
                                        },
                                    ],
                                },
                                List {
                                    elements: [
                                        Variable {
                                            identifier: "topkg",
                                            position: (26, 19),
                                        },
                                    ],
                                },
                            ),
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "strictDeps",
                                            position: (28, 3),
                                        },
                                    ],
                                },
                                Variable {
                                    identifier: "true",
                                    position: (28, 16),
                                },
                            ),
                            Inherit(
                                Some(
                                    Variable {
                                        identifier: "topkg",
                                        position: (30, 12),
                                    },
                                ),
                                [
                                    Raw {
                                        content: "installPhase",
                                        position: (30, 19),
                                    },
                                ],
                            ),
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "buildPhase",
                                            position: (32, 3),
                                        },
                                    ],
                                },
                                String {
                                    parts: [
                                        Expression {
                                            expression: PropertyAccess {
                                                expression: Variable {
                                                    identifier: "topkg",
                                                    position: (32, 19),
                                                },
                                                attribute_path: AttributePath {
                                                    attributes: [
                                                        Raw {
                                                            content: "run",
                                                            position: (32, 25),
                                                        },
                                                    ],
                                                },
                                                default: None,
                                            },
                                        },
                                        Raw {
                                            content: " build --tests true",
                                            position: (32, 29),
                                        },
                                    ],
                                },
                            ),
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "doCheck",
                                            position: (34, 3),
                                        },
                                    ],
                                },
                                Variable {
                                    identifier: "true",
                                    position: (34, 13),
                                },
                            ),
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "checkPhase",
                                            position: (36, 3),
                                        },
                                    ],
                                },
                                String {
                                    parts: [
                                        Expression {
                                            expression: PropertyAccess {
                                                expression: Variable {
                                                    identifier: "topkg",
                                                    position: (36, 19),
                                                },
                                                attribute_path: AttributePath {
                                                    attributes: [
                                                        Raw {
                                                            content: "run",
                                                            position: (36, 25),
                                                        },
                                                    ],
                                                },
                                                default: None,
                                            },
                                        },
                                        Raw {
                                            content: " test",
                                            position: (36, 29),
                                        },
                                    ],
                                },
                            ),
                            KeyValue(
                                AttributePath {
                                    attributes: [
                                        Raw {
                                            content: "meta",
                                            position: (38, 3),
                                        },
                                    ],
                                },
                                Map {
                                    bindings: [
                                        KeyValue(
                                            AttributePath {
                                                attributes: [
                                                    Raw {
                                                        content: "description",
                                                        position: (39, 5),
                                                    },
                                                ],
                                            },
                                            String {
                                                parts: [
                                                    Raw {
                                                        content: "Heterogeneous value maps for OCaml",
                                                        position: (39, 20),
                                                    },
                                                ],
                                            },
                                        ),
                                        KeyValue(
                                            AttributePath {
                                                attributes: [
                                                    Raw {
                                                        content: "homepage",
                                                        position: (40, 5),
                                                    },
                                                ],
                                            },
                                            String {
                                                parts: [
                                                    Raw {
                                                        content: "https://erratique.ch/software/hmap",
                                                        position: (40, 17),
                                                    },
                                                ],
                                            },
                                        ),
                                        KeyValue(
                                            AttributePath {
                                                attributes: [
                                                    Raw {
                                                        content: "license",
                                                        position: (41, 5),
                                                    },
                                                ],
                                            },
                                            PropertyAccess {
                                                expression: Variable {
                                                    identifier: "lib",
                                                    position: (41, 15),
                                                },
                                                attribute_path: AttributePath {
                                                    attributes: [
                                                        Raw {
                                                            content: "licenses",
                                                            position: (41, 19),
                                                        },
                                                        Raw {
                                                            content: "isc",
                                                            position: (41, 28),
                                                        },
                                                    ],
                                                },
                                                default: None,
                                            },
                                        ),
                                        KeyValue(
                                            AttributePath {
                                                attributes: [
                                                    Raw {
                                                        content: "maintainers",
                                                        position: (42, 5),
                                                    },
                                                ],
                                            },
                                            List {
                                                elements: [
                                                    PropertyAccess {
                                                        expression: Variable {
                                                            identifier: "lib",
                                                            position: (42, 21),
                                                        },
                                                        attribute_path: AttributePath {
                                                            attributes: [
                                                                Raw {
                                                                    content: "maintainers",
                                                                    position: (42, 25),
                                                                },
                                                                Raw {
                                                                    content: "pmahoney",
                                                                    position: (42, 37),
                                                                },
                                                            ],
                                                        },
                                                        default: None,
                                                    },
                                                ],
                                            },
                                        ),
                                    ],
                                    recursive: false,
                                },
                            ),
                        ],
                        recursive: true,
                    },
                ],
            },
        },
    },
}