astar functional!