How to make these dynamically typed functions type-safe? [closed]

試著忘記壹切 提交于 2019-12-09 05:27:53

问题


Is there any programming language (or type system) in which you could express the following Python-functions in a statically typed and type-safe way (without having to use casts, runtime-checks etc)?

#1:

# My function - What would its type be? 
def Apply(x):
    return x(x)

# Example usage
print Apply(lambda _: 42)

#2:

white = None
black = None

def White():
    for x in xrange(1, 10):
        print ("White move #%s" % x)
        yield black

def Black():
    for x in xrange(1, 10):
        print ("Black move #%s" % x)
        yield white

white = White()
black = Black()

# What would the type of the iterator objects be?
for it in white:
    it = it.next()

回答1:


1# This is not typeable with a finite type. This means that very few (if any) programming languages will be able to type this.

However, as you have demonstrated, there is a specific type for x that allows the function to be typed:

x :: t -> B

Where B is some concrete type. This results in apply being typed as:

apply :: (t -> B) -> B

Note that Hindley-Milner will not derive this type.

2# This is easy to represent in Haskell (left as an exercise to the reader...)




回答2:


I found a Haskell solution for #1 using Rank-N-Types (just for GHCi)

{-# LANGUAGE RankNTypes #-}
apply :: (forall a . a -> r) -> r
apply x = x x

apply $ const 42 -- Yields 42



回答3:


When it comes to example #1, you would have to specify the return type of Apply(), and then all functions x that you pass also must return this. Most statically typed languages would not be able to do that safely without checks, as the x function you pass in can return whatever.

In example #2 the type of the iterator objects are that they are iterators. If you mean what they return, they return iterators. I don't see why that wouldn't be possible in a static system, but maybe I'm missing something.



来源:https://stackoverflow.com/questions/1079120/how-to-make-these-dynamically-typed-functions-type-safe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!