Fragments are reusable chunks of GraphQL queries that can help reduce code duplication across queries. We want to add support for them in our query builder so we can benefit from their reusability.

Examples Main.elm

``` addressFragment : Fragment addressFragment = fragment "Address" address

addressFields : Node -> Node addressFields node = fields addressFragment node

user : Node -> Node user user = user |> prop "id" |> prop "email" |> prop "name" |> node "address" [] addressFields

```

GraphQL.elm

``` type Fragment = Fragment String (Node -> Node)

fragment : String -> (Node -> Node) -> Fragment fragment name func = Fragment name func

fields : Fragment -> Node -> Node fields (Fragment typeName func) parent = let fieldsName = (String.toLower typeName) ++ "Fields"

    fragment_ =
        newNode ("fragment " ++ fieldsName ++ " on " ++ typeName) []
            |> func

    (Node node) =
        prop ("..." ++ fieldsName) parent
in
    Node { node | fragments = fragment_ :: node.fragments }

```

Links * Fragments