haskell - Is there any non-recursive term that folds over a scott-encoded list? -
suppose have scott-encoded list such as:
scott = (\ c n -> c 1 (\ c n -> c 2 (\ c n -> c 3 (\ c n -> n))))
i want function receives such kind of list , converts actual list ([1,2,3]
), except such function can not recursive. is, must in eta-beta normal form. function exist?
ok, give shot. feel free correct me, because i'm not expert on this.
for arbitrary x
, xs
, must case tolist (\c n -> c x xs)
reduces term convertible x : tolist xs
.
this possible if reduce left hand side c x xs
applying (\c n -> c x xs)
c
, n
. tolist ~ (\f -> f ? ?)
. (btw, part couldn't think of nice rigorous argument; had ideas none nice. i'd happy hear tips).
now must case c x xs ~ (x : tolist xs)
. since x
, xs
distinct universal variables, , variables occurring in right hand side, equation in miller's pattern fragment, , therefore c ~ (\x xs -> x : tolist xs)
general solution.
so, tolist
must reduce (\f -> f (\x xs -> x : tolist xs) n)
n
. clearly, tolist
can't have normal form, since can unfold recursive occurrence.
Comments
Post a Comment