AccelerateHS / AccelerateHS/accelerate

Support recursive functions

Abierto
#346 4 comentarios 0 reacciones 0 asignados Ver en GitHub
language new feature
Lenguaje dominante
Haskell
Estrellas
1k
Forks
135
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

Would it be feasible to add a combinator that looks like this?

```
ewhile :: (Elt a, Elt b) => (Exp a -> Exp (Either b a)) -> Exp a -> Exp b
```

It would iteratively feed the values of type `a` back into the function, until it gets a `Left` value. Once it gets a `Left` value, it would stop.

I started trying to add it myself, but I got stuck when it looked like I needed to implement an `Elt` instance for `Either`. It seems like, in theory, this shouldn't require an `Elt` instance because the `Either` can only ever be used for determining control flow in one particular combinator so an actual representation of the `Either` would never really be needed.

The use case is that I am working on a translation system that converts (more-or-less) normal Haskell code to Haskell code that uses Accelerate. At the moment, it seems like it would be significantly easier to convert general tail recursive functions into a call to something like `ewhile` than it would to the existing `while`.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.